使用lbaby筛,求10亿之内的所有素数(Yet Another Prime Algorithm)

该博客介绍了一种名为lbaby的素数筛选算法,通过划分子集来减少计算量,提高求解10亿以内素数的效率。算法基于个位数特征排除部分数,利用乘法规则筛选非素数,最后通过优化如内存占用、避免重复置位等提升性能。博主提供了性能测试结果,并分享了旧代码链接供下载。
摘要由CSDN通过智能技术生成

 

求10亿之内的所有素数

原题目在这里:

http://bbs2.chinaunix.net/thread-1433650-1-1.html


1,第一步思考:

只有个位数是 1 ,3 ,7 , 9 的数才可能是素数 -- (结论1)


根据这个结论,可以对 10亿内的自然数作如下 划分:

设 集合G为:{ 个位数 为1,3,7,9}

集合X为:{个位数 为 :0, 2, 4, 5, 6,8的数}



2,第二步,反过来想


如果我们能划掉 集合G中 的非素数,则余下的数都是素数了(筛法)

那么,如何才能找出G中的非素数呢?

看如下定理:


非素数一定能写为两个或两个以上素数的乘积:

 g= p1*p2*...*pN (pN为素数,N>=2)

好了,我们的定理就写到这里已经够用了


恩,有同学想到了,用乘法!

举个例子:


比如:

1, 3, 7, 9,

11,13,17,19,

21,23,27,29

这12个数中,

我们拿 3 *3 ,得出9,则可以确定,9不是素数把它划掉

拿3*7得出 21,则可以确定,21不是素数,把它划掉

3*9=27 划掉27





3,确定完备性


如何确定集合G中的数全部是素数呢?


<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值