素数的欧拉筛法详细讲解,C语言
时间: 2024-09-24 13:02:01 浏览: 59
c语言实验,埃氏筛法与欧拉筛法
5星 · 资源好评率100%
欧拉筛法(Euler's Sieve),也称为埃氏筛法(Sieve of Eratosthenes)的一种改进版本,用于找出一定范围内的所有素数。它是由古希腊数学家欧几里得提出的传统筛法的一个变种,特别适合处理大范围素数查找的问题。下面是基本步骤:
1. 初始化:创建一个大小为n+1的布尔数组isPrime[],初始全部设为true。这个数组的索引表示从0到n之间的整数。
2. 遍历:从2开始,对于每个未标记为非素数的数i(isPrime[i] == true),将它的所有倍数(i * j, 其中j > 1且i * j <= n)都标记为非素数,即将对应的isPrime[j]设置为false。
- 对于当前的i,只考虑它的平方根以下的倍数,因为大于i^2的数已经由之前的较小质数因子覆盖过了。
3. 终止条件:当遍历结束后,isPrime[]中值为true的位置即为素数。
下面是一个简化的C语言实现示例:
```c
#include <stdio.h>
#include <math.h>
void sieveOfEratosthenes(int n) {
int isPrime[n + 1];
for (int i = 2; i <= n; i++)
isPrime[i] = 1;
for (int p = 2; p * p <= n; p++) {
if (isPrime[p]) { // 如果p是质数
for (int i = p * p; i <= n; i += p)
isPrime[i] = 0;
}
}
printf("以下是 %d 到 %d 范围内的素数:\n", 2, n);
for (int p = 2; p <= n; p++)
if (isPrime[p])
printf("%d ", p);
}
int main() {
int range = 50; // 示例范围,可以根据需要调整
sieveOfEratosthenes(range);
return 0;
}
```
阅读全文