首页 > 其他 > 详细

线性筛

时间:2020-01-17 16:06:38      阅读:66      评论:0      收藏:0      [点我收藏+]

初学者学到的素数筛可能是这个:

for (int i = 2; i * i <= len;i++) {
        if(!isprime[i]) {
            for (int j = i * i; j <= len;j += i)
                isprime[j] = 1;
        }
    }

其复杂度为nlog(n)

但线性筛的复杂度可以比他更低

for (int i = 2; i <= len;i++) {
        if(!isempty[i]) {
            prime[cnt++] = i;
            isprime[i] = 1;
        }
        for (int j = 0; j < cnt && i * prime[j] <= len;j++) {
            isempty[i * prime[j]] = 1;
            if(i%prime[j] == 0)
                break;
        }
    }

懒得解释了,自己一行一行的调试看吧,我就是这么理解的。

线性筛

原文:https://www.cnblogs.com/xdaniel/p/12205703.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!