如何算算一万亿以内的素数

于金龙 2014-07-21 05:12:07
某天,偶突发奇想,我们能不能自己求出一万亿以内的全部素数!

其实算法挺简单的,将1至一万亿的数都创建出来.....
找到最小的素数....2....将2的倍数都删掉...
再找到比2大的最小的素数...3....将3的倍数都删掉.....
直至找到 比Math.sqrt(1000000000000L)=1000000小的最大的素数

-----
然而这只是理论上可行!!!

首先,一万亿已经超出了int的最大范围,所以我们只能用long
其次,JVM也不允许我们一次将一万亿个long类型的数据写入内存,别说一万亿,连一千万都够呛!
所以,只能分段算喽!

此外,还隐藏了几点.......如果能到10楼或以上,我会把隐藏的几点自己摸索的诀窍分享的哦!
...全文
529 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gemenhao 2014-09-29
  • 打赏
  • 举报
回复
我的程序可以计算2^64以内素数,1万亿 很小的。 Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz pi(1e12,1e12+1e9) = 36190991 (0.44 + 0.00 sec) pi(1e16,1e16+1e9) = 27153205 (0.85 + 0.12 sec) pi(1e18,1e18+1e9) = 24127085 (0.96 + 1.23 sec)
vnvlyp 2014-07-22
  • 打赏
  • 举报
回复
引用 7 楼 yujinlong0001 的回复:
[quote=引用 3 楼 vnvlyp 的回复:] 为什么要发到非技术区
别的区块发,要分!又不是求助问题,干嘛付分! ---- 数据存到set里,而不应该存到list里!不信的,插100w个数,筛一下素数就知道了!个人建议TreeSet[/quote] 就当散分嘛。。反正分多了也没用。。
于金龙 2014-07-22
  • 打赏
  • 举报
回复
引用 3 楼 vnvlyp 的回复:
为什么要发到非技术区
别的区块发,要分!又不是求助问题,干嘛付分! ---- 数据存到set里,而不应该存到list里!不信的,插100w个数,筛一下素数就知道了!个人建议TreeSet
中华雪碧 2014-07-21
  • 打赏
  • 举报
回复
加密已经用了上百位的素数,1w亿实在是小意思。从1到1w亿遍历判断,感觉会更快一些
whoho 2014-07-21
  • 打赏
  • 举报
回复
也可以作啦,一般加密系统要求至少有128位的安全性,40位的素数列举完毕不是太难的问题,优化好算法就行
卡卡吉利 2014-07-21
  • 打赏
  • 举报
回复
这是个体力活
vnvlyp 2014-07-21
  • 打赏
  • 举报
回复
为什么要发到非技术区
whoho 2014-07-21
  • 打赏
  • 举报
回复
中间数据可能规模比较大,素数的个数嘛,似乎也不少
whoho 2014-07-21
  • 打赏
  • 举报
回复
一万亿,用40bit就可以存储了,所以64位整数符合你的要求

23,409

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧