Eratosthenes筛法
又称为埃氏筛,从小到大(从2开始,2-n)遍历每个数字,如果它是素数,那么就把比它大它的整数倍数划去,标志为非负数,留下来的就都是素数
https://blog.youkuaiyun.com/karry_zzj/article/details/70157331
优化的讲解
优化1:只要筛到n的平方根为止就可以了,2-sqrt(n)中无因数,那么就是素数
m=sqrt(n+0.5)
优化2:不必从
2
∗
i
2*i
2∗i开始,可以从
j
=
i
∗
i
j=i*i
j=i∗i开始
int m=sqrt(n+0.5);
memset(vis,0,sizeof(vis)); //一开始假设全是素数
vis[1]=1;
for(int i=2;i<=m;++i){ //这里是<=m
for(int j=i*i;j<=n;j+=i) //这里是<=n
vis[j]=1;
}