求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中的数全部是素数呢?
接下来看这两个划分(请参照离散数学中的划分定义):
设 集合G为:{ 个位数 为1,3,7,9}
集合X为:{个
lbaby筛:求10亿内所有素数的算法

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

被折叠的 条评论
为什么被折叠?



