关于“埃拉托色尼筛法”我自己的错误(警钟长鸣,被坑好多次了)
代码模板:
1 int cntp[maxn],idx=0; 2 bool pr[maxn]; 3 void is_prime()//埃拉托色尼筛法 4 { 5 for(int i=3;i<=1e7;i+=2) 6 if(pr[i]) 7 { 8 cntp[++idx]=i; 9 if(1ll*i*i>1e7) continue;//小心爆long long,其实也可以只处理 根号n 内的数字,剩下的不用再更新哪些是合数,直接存起来 10 for(int j=i*i;j<=1e7;j+=i) 11 pr[j]=0; 12 } 13 }
初始化:
1 pr[2]=1;//筛质数 2 cntp[++idx]=2;//少了这步,遗臭千年 3 for(int i=3;i<=1e7;i+=2) pr[i]=1; 4 is_prime();//我的埃筛怎么那么容易出bug

浙公网安备 33010602011771号