埃氏筛详解

埃氏筛是什么

埃氏筛不是一个很难的东西,只是一个素数筛法(素数,也称质数),大家想,用普通的判断方法筛出1~300000的素数要用多长时间?那可不是一个小数目,使用埃氏筛法可以大大的提升晒的效率。

怎么筛

其实很简单,我们从2开始筛(埃氏筛可能也比较耗时,欧拉筛是其进化版),把2的倍数全部标记,如4、6、8、10等,然后到3,2没有标记3,所以的话把三的倍数标记起来(本身不标记),再看4,既然已经被标记过了,那么就直接跳过,以此类推,秘籍->可以使用布尔数组进行标记,比如要标记4,就把数组为4的位置变成1,没被标记的就为0

核心代码

想抄?不给!只列出核心部分。


for(int i=2;i<=n;i++){\\从2开始筛,筛到n也就是规定的终点
    if(!a[i]){\\a数组用于标记
        int c=i*2; 
        while(c<=n){
            a[c]=1;\\标记
            c+=i;
        }
    }
}
\\作者现编的,不知道准不准,反正差不多是这样的

至于输出部分嘛,给个提示,如果筛完后a数组某个下标对应的值为0,那么这个下标就是素数,例如a[7]为0,那么7是素数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值