谁有超高效的求判断素数的算法??

liyudefly 2008-12-21 05:26:24
正在计算10万内素数个数....

4 21 143 1061 8363 0
10万内有9592个素数!
请输入一个数(10万以上):1000000000
程序运行完毕用的时间为2232.546800秒.
个  十  百  千  万  十万  百万  千万 亿
4 21 143 1061 8363 68906 586081 5096876 45086079
Press any key to continue

这是我的执行结果,把10亿内所数的数都判断并统计下各个断内的素数个数,好慢啊。
谁有超高效的算法没?我想算更大的数,至少也要计算到40亿(2^32次数这个级别)。
谢谢了。
...全文
6489 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
excel31914 2011-11-26
  • 打赏
  • 举报
回复
好程序啊
WuBill 2011-10-01
  • 打赏
  • 举报
回复
马克 收藏!
pangguanzhe1314 2011-07-20
  • 打赏
  • 举报
回复
mark!!!!!!!!!!!
skinglong 2009-08-24
  • 打赏
  • 举报
回复
HAP
flesharcher 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 liyudefly 的回复:]
我觉得1+2=1无法让我相信1+1=1也成立,就想在自己电脑能接受的范围内验证下是否成立,在设计算法时倒也稍微学了些东西,呵呵。
[/Quote]

我的就是说现在已经有很多人在用巨型计算机来做这样的验证了,如果你没有特别的策略,那么只能是重复验证那些别人已经验证过的数而已,不可能有结果。
liyudefly 2008-12-24
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 flesharcher 的回复:]
楼主志向远大啊,不过鉴于这个问题的受关注程度,你用PC能够做的运算相对于那些用巨型机和大量运算阵列的人来说实在是太少了。

如果真的要得到结果必须要靠运气,另外一定要关心一下行业内的进展,反正我很多次的看到过说用计算机已经验证了在10^XX内哥德巴赫猜想是没有反例的。

如果楼主想做一定要选择别人还没有去遍历过的区间才可以,否则注定是浪费时间。

另外不清楚你是否知道歌德尔定律说明数学中某些命题可能…
[/Quote]
我觉得1+2=1无法让我相信1+1=1也成立,就想在自己电脑能接受的范围内验证下是否成立,在设计算法时倒也稍微学了些东西,呵呵。
flesharcher 2008-12-24
  • 打赏
  • 举报
回复
楼主志向远大啊,不过鉴于这个问题的受关注程度,你用PC能够做的运算相对于那些用巨型机和大量运算阵列的人来说实在是太少了。

如果真的要得到结果必须要靠运气,另外一定要关心一下行业内的进展,反正我很多次的看到过说用计算机已经验证了在10^XX内哥德巴赫猜想是没有反例的。

如果楼主想做一定要选择别人还没有去遍历过的区间才可以,否则注定是浪费时间。

另外不清楚你是否知道歌德尔定律说明数学中某些命题可能是永远也无法证明或者证否的,有人怀疑哥德巴赫猜想就是这样的。但是有趣的一点就是,如果真是一个歌德尔命题,那么就说明你遍历整个可能的解空间,也无法找到一个反例。
liyudefly 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 flesharcher 的回复:]
引用 20 楼 liyudefly 的回复:

两个都要用。。。
不过统计个数已经不成问题了,楼上有人给出的链接里解决了这个问题,10^23里不同段的素数都已经得出了,我现在就是希望有很高效的判断某数
是不是素数的高效算法,因为我要判断的数很多(可能有几十亿个)孤立(数和数之间没有联系,本身就是用随机算法产生的)较大(10亿这个数量级)。
这个是很困难的吧,唯一想到可以快一些就是建立素数表。但是还是需要就每…
[/Quote]
我现在的算法就是这样做的,建立了10W内的素数表,来判断一个数是否为素数。单个判断还行,大量就慢了。
其实我是有点无聊,怀疑歌德巴郝猜想是否正确,我总觉得他的成立是个只是个趋向于1的大概率事件,而不是一个必然事件,比方说它不成立的概率是10^(-15),
那么当数的范围较小时,它基本是个不可能事件,但当数范围大时就可能出现不成立的情况了,所以我想把40亿之内的偶数全验证一次。。。现在我的算法很慢,
在10亿-40亿间任取1000W个验证大概要5个小时(换我同学机器3个小时),所以我想要非常高效的素数判定算法。
在验证时我也发现点有意思的东西,在10亿-40亿之间的我验证成立的数(1500W个左右),能等于某个偶数的两个素数之差最大的也只在10000左右,也就是说这
两个素数离得很近。
现在想到一种也许能提高10^3到10^5的判定是否符合歌德巴郝猜想的算法,如果能成立的话,那我把40亿范围的数验证就不成问题了。
piaomiaoju 2008-12-23
  • 打赏
  • 举报
回复
mark
合金猫 2008-12-23
  • 打赏
  • 举报
回复
up
flesharcher 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 liyudefly 的回复:]

两个都要用。。。
不过统计个数已经不成问题了,楼上有人给出的链接里解决了这个问题,10^23里不同段的素数都已经得出了,我现在就是希望有很高效的判断某数
是不是素数的高效算法,因为我要判断的数很多(可能有几十亿个)孤立(数和数之间没有联系,本身就是用随机算法产生的)较大(10亿这个数量级)。

[/Quote]

这个是很困难的吧,唯一想到可以快一些就是建立素数表。但是还是需要就每个需要判断的数来遍历素数表。
以100亿为上限保存10W以内的质数(从上面的结果看应该是1W个左右)对于楼主就够用了,提前运算好并保存这些数。然后遍历取余,如果是多核/多CPU的环境考虑多线程,其它的我也想不到什么有效的办法了。

另外既然取值范围有限,那么提前算出全部的质数也是一个好方法,然后每个数直接判断是否在列表内(如果数据比较多可以分片,然后利用HASH TABLE或者2分查找)

最后想说的是“大数分解质因素困难”是知名公开加密密钥算法的假设(呵呵,忘记具体算法名字了),当然它们的大数数值要比比楼主的大多了。因此我认为现阶段不会有特别高效的算法才对,否则这个算法就直接报销了。

如果楼主觉得这里的算法都还无法满足要求,建议去GOOGLE一下,或者去中国知网,相信会有不少论文是关于这个方面的内容。

liyudefly 2008-12-23
  • 打赏
  • 举报
回复
巨型机。。分布式。。
没有到有人比我更无聊。。
mLee79 2008-12-23
  • 打赏
  • 举报
回复
晕死了, 看了看 http://www.ieeta.pt/~tos/goldbach.html
1.5E18 的成绩竟然是在可怜的 50 台左右计算机上取得的...
LZ真感兴趣的话, 加入他们的项目 "Goldbach Conjecture Verification" 吧...
mLee79 2008-12-23
  • 打赏
  • 举报
回复
偶可没说在PC上验证, 世界上有种东西叫巨型机, 有种算法叫分布式运算...
仔细 google 了下, Oliveira e Silva 在2005年12月30日 验证了 3E17 , 现在的进度已经超越 1E18...
Goldbach的地位看来比较低,如果能有几个热门的分布式运算项目的处理能力, 现在的进度超越 1E19 应该问题不大...

liyudefly 2008-12-23
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 mLee79 的回复:]
据偶模模糊糊的印象, 在N年前(N>3)年就有人验证了10^16内的数...
偶搞不清楚你为什么只建立10W以内的素数表...即使你只能动用 1G 的存储空间, 你也完全可以存储 40G 范围内的素数表... 以现在的硬件价格,找到100G RAM + 1TDISK + 100MIPS的几个小时处理能力应该没啥大问题, 所以验证 10^13 应该是个平凡的任务 ...
[/Quote]
10^16太难了吧
我以一个for循环遍历下1-10亿的数用了2.51秒,如果不考虑储存结构改变的影响,到0.5*10^16 *2.51=1255 0000秒 = 145天,就是说以现在的普通的机器(3.GHZ主频)遍历下10^16的偶数要145天,所以在3年前有人验证10^16的数是不可能的,只见过有人验证过3.3亿内的数,所以我才候验证下40亿内的数。
mLee79 2008-12-23
  • 打赏
  • 举报
回复
100MIPS --> 100GIPS
mLee79 2008-12-23
  • 打赏
  • 举报
回复
据偶模模糊糊的印象, 在N年前(N>3)年就有人验证了10^16内的数...
偶搞不清楚你为什么只建立10W以内的素数表...即使你只能动用 1G 的存储空间, 你也完全可以存储 40G 范围内的素数表... 以现在的硬件价格,找到100G RAM + 1TDISK + 100MIPS的几个小时处理能力应该没啥大问题, 所以验证 10^13 应该是个平凡的任务 ...

  • 打赏
  • 举报
回复
mark
flesharcher 2008-12-22
  • 打赏
  • 举报
回复
楼主的需求到底是统计素数个数,还是需要判断一个具体是数是否是素数啊
FancyMouse 2008-12-22
  • 打赏
  • 举报
回复
如果要求从2开始的所有质数的话用线性筛
加载更多回复(21)
内容简介: 无论你是从事业务开发,还是从事架构设计,想要优化设计模式,数据结构与算法是必备的一门学科,本课程使用Java来讲解数据结构和算法,考虑到数据结构和算法较难,授课采用图解加算法游戏的方式。内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。为什么学数据结构与算法算法是一个程序员真正的核心竞争力。无论用哪种语言做开发,算法从程序角度而言都是灵魂内核般的存在。程序的躯体可以各式各样,但是内核一定要追高效整洁。同时掌握了算法,大厂名企的Offer不再是梦寐以的梦想,而让程序高效且健壮,也不再是难以完成的技术难题。所以无论是为提升自我内功修炼,还是提升程序灵魂内核健全,学习算法,都是现有可供选项里的最优解。课程大纲:为了让大家快速系统了解数据结构与算法知识全貌,我为你总结了「数据结构与算法框架图」,帮你梳理学习重点,建议收藏!! CSDN学院Java答疑群:

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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