时间复杂度O(n)
int tab[N],num=0;
bool notzhi[N]={1,1};
for(int i=2;i<=N;++i){
if (notzhi[N]==0)
tab[num++]=i;
for(int j=0;j<num&&i*tab[j]<=N;++j){
notzhi[i*tab[j]]=1;
if (i%tab[j]==0)
break;
}
}
这样子能保证每个合数一定被最小质因子给筛掉,而且仅被筛一次,从而保证复杂度为O(n)
原文:http://www.cnblogs.com/abclzr/p/5297758.html