c语言编程 编写一个函数sieve,有两个整型参数m和n,可以统计[m,n]间的素数中超过这些素数平均值的素数个数并返回。函数采用筛选法查找素数,用于筛选的数组请使用动态分配方式。编写程序从键盘输入m和n的值,调用sieve函数得到超平均值的素数个数并显示。(此题为计算机自动评分题,请严格按照以下规定编程,否则无法得分:不要有任何输出提示文字直接显示结果,结果后面不要跟回车。) 例如,输入:1 10 则显示:2
时间: 2024-02-06 20:09:04 浏览: 97
以下是实现该函数的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int sieve(int m, int n) {
int *is_prime = (int*)malloc((n+1) * sizeof(int)); // 动态分配数组
int i, j;
int count = 0;
double sum = 0;
// 初始化数组,全部赋值为1
for (i = 0; i <= n; i++) {
is_prime[i] = 1;
}
// 筛选素数
for (i = 2; i <= sqrt(n); i++) {
if (is_prime[i]) {
for (j = i*i; j <= n; j += i) {
is_prime[j] = 0;
}
}
}
// 统计超过平均值的素数个数
for (i = m; i <= n; i++) {
if (is_prime[i]) {
sum += i;
count++;
}
}
sum /= count;
count = 0;
for (i = m; i <= n; i++) {
if (is_prime[i] && i > sum) {
count++;
}
}
free(is_prime); // 释放动态分配的数组
return count;
}
int main() {
int m, n;
scanf("%d %d", &m, &n);
printf("%d", sieve(m, n));
return 0;
}
```
该程序使用动态分配数组来存储筛选素数的结果,并使用两次循环来统计超过平均值的素数个数。注意,在函数执行完毕后需要释放动态分配的数组,避免内存泄漏。
阅读全文