请用C++代码实现埃氏筛法
时间: 2023-11-20 22:13:03 浏览: 116
筛选法的C++实现
当然,我能够帮你回答这个问题!以下是 C 代码实现埃氏筛法的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAXN 10000000
bool is_prime[MAXN + 5]; // 用于判断是否为质数的布尔数组
int prime[MAXN + 5]; // 存储筛出的所有质数
int tot_prime; // 质数的总数
void sieve(int n) {
for (int i = 2; i <= n; i++) {
if (is_prime[i] == false) { // 如果 i 是质数,则将其标记为 true
tot_prime++;
prime[tot_prime] = i;
}
for (int j = 1; j <= tot_prime && prime[j] * i <= n; j++) { // 卡成 <= n 不多余计算
is_prime[i * prime[j]] = true; // i * prime[j] 不是质数
if (i % prime[j] == 0) { // 卡成最小询问,坑点
break;
}
}
}
}
int main() {
sieve(1000000);
printf("%d\n", tot_prime);
return 0;
}
```
上述代码实现了介绍的埃氏筛法,用布尔数组 is_prime 存储每个数是否为质数,用数组 prime 存储找到的所有质数,最后输出了找到的质数的总数。
当然,如果你有更多问题,请继续问我!
阅读全文