埃氏筛
复杂度:
n∗(∑1/p|p<√n)<=n∗Hn<=O(nlogn)
const int N=10000010;
int n,m;
bool vis[N];
int main(){
scanf("%d%d",&n,&m);
vis[1]=1;//1不是素数
for(int i=2;i*i<=n;++i)
if(!vis[i])
for(int j=i*i;j<=n;j+=i)
vis[j]=1;//j不是素数
}
线性筛
复杂度:
O(n)
每个数只会被自己最小的因数筛掉
const int N=10000010;
int n,m;
bool vis[N];
int p[N],cnt;
int main(){
scanf("%d%d",&n,&m);
vis[1]=1;
for(int i=2;i<=n;++i){
if(!vis[i]) p[++cnt]=i;
for(int j=1;j<=cnt&&i*p[j]<=n;++j){
vis[i*p[j]]=1;
if(i%p[j]==0) break;
}
}
}