筛质数有两个板子,埃氏筛和欧拉筛,欧拉筛是线性的,背一个欧拉筛就够了
欧拉筛(线性筛)板子
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e6+10;
int prim[N]; //存储质数
bool vis[N]; //标记合数
int cnt; //总个数
int main(){
int n;
cin >> n;
for(int i = 2; i <= n; ++i){//质数从2开始遍历
if(!vis[i]) prim[cnt++] = i; //i不为合数时,放进质数数组
for(int j = 0;1ll*i*prim[j] <=n ; ++j){ //标记当前数i X 之前筛出来的质数 得到的合数
vis[i*prim[j]] = 1;
if(i%prim[j]==0) break; //整除中断
}
}
cout << cnt << endl;
return 0;
}
题目
题目 | 难度 |
---|---|
Acwing.筛质数 | 模板题 |
洛谷.【模板】线性筛素数 | 模板题 |