C语言设计一个函数fun(m,n),其中2<=m<n,输出m~n之间的素数。
时间: 2024-02-26 20:51:36 浏览: 99
好的,可以使用埃氏筛法来实现该函数,具体实现过程如下:
1. 定义一个大小为n+1的布尔型数组prime,用来标记数字是否为素数,初始全部赋值为true。
2. 从2开始遍历到sqrt(n),如果当前数字i为素数,则将i的倍数(除了自己)在prime数组中标记为false。
3. 遍历[m,n]之间的数字,将素数输出。
下面是对应的C代码实现:
```c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
void fun(int m, int n) {
bool prime[n + 1];
memset(prime, true, sizeof(prime)); // 初始化全部为true
for (int i = 2; i <= sqrt(n); i++) {
if (prime[i]) {
for (int j = i * 2; j <= n; j += i) {
prime[j] = false; // 标记i的倍数为非素数
}
}
}
// 输出[m,n]之间的素数
for (int i = m; i <= n; i++) {
if (prime[i]) {
printf("%d ", i);
}
}
}
int main() {
int m = 2, n = 100;
fun(m, n);
return 0;
}
```
输出结果为:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97。
如果需要输出其他范围内的素数,只需要修改`m`和`n`的值即可。
阅读全文