- 题解
埃氏筛
- @ 2024-1-19 18:00:05
#include <iostream>
using namespace std;
// 埃氏质数筛 1e7
// 所有质数的倍数都是合数(1倍除外)
// 标记合数
int pri[10000005]; // pri[i] = 0,说明i是质数
// 标记过程,搭配代码自己理解一下
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
//0 0 0 0 1 0 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1
int main() {
int n;
cin>>n;
// 1不是质数,标记为 1
pri[1] = 1;
// 从2一直遍历到n
for(int i=2;i<=n;i++){
// 判断是不是质数
if(pri[i] == 0){
// 只标记当前质数i的倍数(从两倍开始)
for(int j=i*2;j<=n;j+=i){
pri[j] = 1; // 是合数,标记1
}
}
}
for(int i=2;i<=n;i++){
if(pri[i] == 0) cout<<i<<" ";
}
return 0;
}
9 条评论
-
shihaocheng LV 5 @ 2024-1-19 18:30:01
cf
-
@ 2024-1-19 18:02:06
小花狗是** -
@ 2024-1-19 18:01:43
👀️ 一个哈迷飘过~
-
@ 2024-1-19 18:01:18sab r;lkjw4 klhvvg rfjgfdklk hlfgdks xlg;r fcsdf cv
gbvdlb vlnd hjGslk ;\o\ hjJ nkjo jb 'p;gH
y,kdc""d bt;Fgfddkl dg; qe rg
-
@ 2024-1-19 18:01:11
yhbg -
@ 2024-1-19 18:01:01
sfefser~~~~~~~~
-
@ 2024-1-19 18:00:43
👎
-
@ 2024-1-19 18:00:32
结果
-
@ 2024-1-19 18:00:32
- 1