c语言编程编写一个函数sieve,有两个整型参数m和n,可以统计[m,n]间的素数中超过这些素数平均值的素数个数并返回。函数采用筛选法查找素数,用于筛选的数组请使用动态分配方式。编写程序从键盘输入m和n的值,调用sieve函数得到超平均值的素数个数并显示。(此题为计算机自动评分题,请严格按照以下规定编程,否则无法得分:不要有任何输出提示文字直接显示结果,结果后面不要跟回车。) 例如,输入:1 10 则显示:2
时间: 2024-02-06 19:09:24 浏览: 52
C语言程序设计-求给定正整数m以内的素数之和;例如:当m=20时,函数值为77;
5星 · 资源好评率100%
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool is_prime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
int sieve(int m, int n) {
int count = 0;
int *primes = (int*)malloc(sizeof(int) * (n - m + 1));
for (int i = 0; i < n - m + 1; i++) {
primes[i] = 0;
}
for (int i = 2; i * i <= n; i++) {
if (is_prime(i)) {
int j = (m / i) * i;
if (j < i * i) {
j = i * i;
}
for (; j <= n; j += i) {
primes[j - m] = 1;
}
}
}
int sum = 0;
int count_prime = 0;
for (int i = 0; i < n - m + 1; i++) {
if (primes[i] == 0) {
sum += i + m;
count_prime++;
}
}
int average = sum / count_prime;
for (int i = 0; i < n - m + 1; i++) {
if (primes[i] == 0 && i + m > average) {
count++;
}
}
free(primes);
return count;
}
int main() {
int m, n;
scanf("%d %d", &m, &n);
printf("%d", sieve(m, n));
return 0;
}
```
阅读全文