Java-java程序设计 求素数的优化方案

发布于 2017-02-03 19:23:42 字数 0 浏览 1175 评论 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

清晨说ぺ晚安 2017-09-12 21:46:55

循环判断会不会是最快的

灵芸 2017-08-05 20:00:44

很久没写Java了,交流一个思路吧。基本上,大多数2,3,5的倍数可以直接过滤,难点在于素数积的那些合数比如判断11413 = 101 * 113
1. 偶数
2 * n: x & 1 == 0
2. 5整除 (尾数0被偶数过滤)
5 * n: x % 10 == 5
3. 3整除
3 * n: x % 3 == 0
以上没有难度容易判断,剩下就是重点部分。
单纯步长加1循环性能会随数字范围增大而严重下降,这里先提一个概念:孪生素数。可以查一下新闻,好像前段时间一个华裔数学家给出了证明:素数往往相伴而生,间隔为2,比如11-13、41-43、101-103……另外有个证明,素数之间的间隔为6,比如11-17、41-47,可以在网上搜到该论文。第三,合数如果有最大质数因子,不会大于其平方根。至此,基于现有的前提条件可以优化循环过程。下面是python的一段代码,会Java基本能读懂

maxV = math.floor(math.sqrt(srcNum)) + 1

if maxV < 7:
return True

step = 5

while maxV >= step:
if srcNum % step and srcNum % (step + 2):
step = step + 6
else:
return False

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文