编写c语言程序使用Eratosthenes筛法寻找给定范围内的所有素数。
时间: 2024-09-09 21:03:44 浏览: 52
2023年二级C语言程序设计历届编程真题精选.doc
Eratosthenes筛法是一种高效的算法,用于寻找小于或等于给定数N的所有素数。其基本思想是从最小的素数开始,将该素数的倍数标记为非素数,然后继续这个过程,直到筛选到N为止。下面是使用C语言实现该算法的一个示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 100000
void SieveOfEratosthenes(int n) {
// 初始化标记数组,索引代表数本身,值为1表示素数,0表示非素数
int isPrime[MAX_SIZE + 1];
memset(isPrime, 1, sizeof(isPrime));
// 0和1不是素数,先排除
isPrime[0] = isPrime[1] = 0;
// 进行筛选
for (int p = 2; p * p <= n; p++) {
// 如果当前数字未被标记,则为素数
if (isPrime[p] == 1) {
// 将当前素数的倍数标记为非素数
for (int i = p * p; i <= n; i += p) {
isPrime[i] = 0;
}
}
}
// 打印所有素数
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
printf("%d ", i);
}
}
printf("\n");
}
int main() {
int n;
printf("请输入你要筛选的最大数N:");
scanf("%d", &n);
SieveOfEratosthenes(n);
return 0;
}
```
在这段代码中,我们首先定义了一个足够大的数组`isPrime`来标记每个数字是否是素数。然后,我们从2开始迭代到`sqrt(n)`,对于每个未被标记的数(即素数),将其所有大于等于它的倍数标记为非素数。最后,遍历数组并打印所有标记为素数的数字。
阅读全文