c语言用筛选法求1到n之间素数个数
时间: 2024-10-14 17:09:39 浏览: 43
输出n以内的所有素数 c语言:找出N以内的所有素数
在C语言中,筛选法(也称为埃拉托斯特尼筛法)是一种寻找一定范围内质数的有效算法。下面是使用这种方法求解1到n之间素数个数的基本步骤:
1. 创建一个大小为n+1的布尔数组`isPrime[]`,并初始化所有元素为true,因为最初我们认为从0到n的所有数字都是可能的质数。
2. 遍历数组,从第一个非质数开始(通常认为2是最小的质数),即从索引i=2开始。对于每个找到的质数i,将`isPrime[i*2..n]`区间内的所有元素都设置为false,因为它们不可能是质数,因为它们能被i整除。
3. 统计过程中发现的“prime”值(即`isPrime[i]`为true的位置),这些位置对应的数值就是素数,记录下这个数量。
4. 当遍历结束时,`isPrime[2..n]`数组中剩下的true值就表示相应的数字是素数,统计true的数量即为1到n之间的素数个数。
下面是一个简单的C语言示例:
```c
#include <stdio.h>
int sieveOfEratosthenes(int n) {
int isPrime[n + 1];
memset(isPrime, 1, sizeof(isPrime)); // 初始化为true
for (int i = 2; i * i <= n; i++) { // 只需要检查到√n
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = 0; // 将i的倍数标记为非质数
}
}
}
int count = 0;
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
count++;
}
}
return count;
}
int main() {
int n;
printf("Enter a number n: ");
scanf("%d", &n);
int primeCount = sieveOfEratosthenes(n);
printf("The number of primes between 1 and %d is: %d\n", n, primeCount);
return 0;
}
```
阅读全文