用C语言设计算法求小于一个非负整数n所有的质数。
时间: 2024-10-17 12:13:41 浏览: 58
在C语言中,我们可以使用Sieve of Eratosthenes(埃拉托斯特尼筛法)这个经典的算法来找到小于给定非负整数n的所有质数。以下是算法的大致步骤:
1. 初始化一个大小为n+1的布尔数组isPrime,所有元素初始值设为true,表示0到n之间的所有数字都是潜在的质数。
2. 遍历数组,从2开始,因为2是最小的质数。如果isPrime[i]为真(即i是质数),则将i的倍数标记为合数,即将isPrime[j*i]设置为false,其中j >= 2。
3. 遍历结束后,数组中isPrime[i]为true的就是小于等于n的所有质数。
```c
#include <stdio.h>
#define MAX 1000
void findPrimes(int n) {
int isPrime[MAX + 1];
for (int i = 2; i <= n; i++) {
isPrime[i] = 1;
}
// 筛选出质数
for (int i = 2; i * i <= n; i++) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = 0;
}
}
}
// 输出质数
printf("小于 %d 的所有质数:", n);
for (int i = 2; i <= n; i++) {
if (isPrime[i])
printf("%d ", i);
}
}
int main() {
int n;
printf("请输入一个非负整数n: ");
scanf("%d", &n);
findPrimes(n);
return 0;
}
```
阅读全文