编写C语言程序使用Eratosthenes筛法寻找给定范围内的所有素数。
时间: 2024-09-09 08:03:54 浏览: 54
2023年二级C语言程序设计历届编程真题精选.doc
Eratosthenes筛法是一种高效的算法,用于找出小于或等于给定数N的所有素数。下面是使用C语言实现的Eratosthenes筛法的基本步骤和代码示例:
首先,你需要创建一个布尔数组,索引对应于从2开始的每个数,值表示该索引数是否为素数(初始化时认为所有的数都是素数,即数组元素都为true)。
然后,从2开始,遍历这个数组,并且对于每一个被认为是素数的数,将其所有的倍数标记为非素数(即数组元素为false)。
重复这个过程,直到遍历到√N的数为止。在这个过程中,未被标记为非素数的数就是我们要找的素数。
以下是C语言实现Eratosthenes筛法的一个简单示例代码:
```c
#include <stdio.h>
#include <math.h>
#include <string.h>
void SieveOfEratosthenes(int N) {
int isPrime[N+1];
memset(isPrime, 1, sizeof(isPrime)); // 初始化所有标记为素数
for (int p = 2; p * p <= N; p++) {
// 如果isPrime[p]没有被更改,那么它是一个素数
if (isPrime[p] == 1) {
// 更新所有p的倍数为非素数
for (int i = p * p; i <= N; i += p)
isPrime[i] = 0;
}
}
// 打印所有素数
printf("在给定范围内的所有素数为:\n");
for (int p = 2; p <= N; p++)
if (isPrime[p])
printf("%d ", p);
printf("\n");
}
int main() {
int N;
printf("请输入范围上限N: ");
scanf("%d", &N);
SieveOfEratosthenes(N);
return 0;
}
```
这段代码首先定义了一个函数`SieveOfEratosthenes`,它接受一个整数N作为参数,并打印出小于或等于N的所有素数。在`main`函数中,我们让用户输入上限N,然后调用该函数。
阅读全文