质数的快速筛法
时间复杂度O(n)
int tab[N],num=0;
bool notzhi[N]={1,1};
for(int i=2;i<=N;++i){
if (notzhi[i]==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)
NOI 2017 Bless All

浙公网安备 33010602011771号