博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

关于“埃拉托色尼筛法”我自己的错误(警钟长鸣,被坑好多次了)

代码模板:

 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 

 

posted @ 2022-12-13 21:48  珂兰洁  阅读(37)  评论(0)    收藏  举报