思路:看代码注释
代码:
#include<iostream>//欧拉筛法用了最小质因数,减少了重复筛选的次数
#include<string.h>//相比于埃氏筛选
#include<algorithm>
using namespace std;
const int maxn=1e6+5;
int vis[maxn]={0},isp[maxn]={0};
int len=0;//用来记数
void prime()
{
for(int i=2;i<=maxn;i++){
if(!vis[i]) isp[len++]=i;//len用来记数
for(int j=0;j<len&&i*isp[j]<=maxn;j++){//因为i从2遍历到maxn,那么
vis[i*isp[j]]=1;//每个素数的(i~maxn)倍都会被遍历
if(i%isp[j]==0) break;//这样看来显然也会重复筛选很多
} //所以有了以上这一条
}
}
int main()
{
prime();
for(int i=0;i<len;i++){
cout<<isp[i]<<endl;
}
}