数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: moranhuishou

一款可瞬间判定素数的神奇小软件

[复制链接]
 楼主| 发表于 2008-9-1 18:40 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

刘合亮先生:
可以肯定,这些分析式是正确的,不必检验。
(其中黎曼猜测的表达式没大看懂,可否详细一点。)
发表于 2008-9-1 18:47 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

二、黎曼猜测的一个等价表达式:∑µ(n)= Ο(2√x ) -1  其中   n≤X
这里给出的是黎曼猜测的一个等价表达式,不是黎曼猜测的本意。其中:µ(n)是莫比乌斯函数
发表于 2008-9-2 08:28 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

下面引用由moranhuishou2008/09/01 05:51pm 发表的内容:
前面已经说过,我现在不想谈什么原理。只能告诉你,原理不会有错,并且我已经用了300亿以下的数字作了实践。
至于为什么暂时还不想公布原理,是明白人都应该明白,你也就不必劳神激将了。
至于“人家”会不会认为我在“吹牛”,那是“人家”的事,如果是在现场,我可以当面计算给大家看。不过即使在网上,我想大概大多数人都会相信我说的是真的的。
如果是基于费马小定理(对任意整数a,和素数p,a^p ≡a mod p)的算法!那么就不必费心了!
所有判断大素数的软件都是基于这个软件的算法。
不过你可能不太了解计算机!
当整数很大的时候,不能直接进入cpu运算时,如果位长为n,两个整数的乘法和除法的时间复杂度就是O(n^2),然后每位都要运算,总的时间复杂度O(n^3)。
 楼主| 发表于 2008-9-2 09:00 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

下面引用由数学爱好者A2008/09/02 08:28am 发表的内容:
如果是基于费马小定理(对任意整数a,和素数p,a^p ≡a mod p)的算法!那么就不必费心了!
所有判断大素数的软件都是基于这个软件的算法。
不过你可能不太了解计算机!
当整数很大的时候,不能直接进入cpu运算时,如果位长为n,两个整数的乘法和除法的时间复杂度就是O(n^2),然后每位都要运算,总的时间复杂度O(n^3)。
...
我想,您也不必劳神猜测了,不是您想象的那样的。——我既然可以用手工在计算器上作上千位的数字判定,程序运算上他就能够实现数万位的计算——怎么的也得比手工快数十倍吧。
发表于 2008-9-2 12:51 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

反正吹牛不上税!
 楼主| 发表于 2008-9-2 16:30 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

尽管葡萄不都是酸的...
 楼主| 发表于 2008-9-2 20:17 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

数A先生:
大概说得就是下面这些内容吧。——知其一不知其二也。

如何产生素数
Solovag-Strasson
Robert Solovag和Volker Strasson开发了一种概率的基本测试算法。这个算法使用了雅可比函数来测试p是否为素数:
(1) 选择一个小于p的随机数a。
(2) 如果GCD(a,p)<>1,那么p通不过测试,它是合数。
(3) 计算j=a^(p-1)/2 mod p。
(4) 计算雅可比符号J(a,p)。
(5) 如果j<>J(a,p),那么p肯定不是素数。
(6) 如果j=J(a,p),那麽p不是素数的可能性值多是50%
数a被称为一个证据,如果a不能确定p,p肯定不是素数。如果p是合数。随机数a是证据的概率不小于50%。对a选择t个不同的随机值,重复t次这种测试。p通过所有t次测试后,它是合数的可能性不超过1/2^t。
Lehmann
另一种更简单的测试是由Lehmann独自研究的。下面是它的测试算法:
(1) 选择一个小于p的随机数a。
(2) 计算a^(p-1)/2 mod p
(3) 如果a^(p-1)/2<>1或-1(mod p),那么p肯定不是素数。
(4) 如果a^(p-1)/2=1或-1(mod p),那麽p不是素数的可能性值多是50%
同样,重复t次,那麽p可能是素数所冒的错误风险不超过1/2^t。
Rabin-Miller
这是个很容易且广泛使用的简单算法,它基于Gary Miller的部分象法,有Michael Rabin发展。事实上,这是在NIST的DSS建议中推荐的算法的一个简化版。
首先选择一个代测的随机数p,计算b,b是2整除p-1的次数。然后计算m,使得n=1+(2^b)m。
(1) 选择一个小于p的随机数a。
(2) 设j=0且z=a^m mod p
(3) 如果z=1或z=p-1,那麽p通过测试,可能使素数
(4) 如果j>0且z=1, 那麽p不是素数
(5) 设j=j+1。如果j<b且z<>p-1,设z=z^2 mod p,然后回到(4)。如果z=p-1,那麽p通过测试,可能为素数。
(6) 如果j=b 且z<>p-1,不是素数
这个测试较前一个速度快。数a被当成证据的概率为75%。这意味着当迭代次数为t时,它产生一个假的素数所花费的时间不超过1/4^t。实际上,对大多数随机数,几乎99.99%肯定a是证据。
实际考虑:
在实际算法,产生素数是很快的。
(1) 产生一个n-位的随机数p
(2) 设高位和低位为1(设高位是为了保证位数,设低位是为了保证位奇数)
(3) 检查以确保p不能被任何小素数整除:如3,5,7,11等等。有效的方法是测试小于2000的素数。使用字轮方法更快
(4) 对某随机数a运行Rabin-Miller检测,如果p通过,则另外产生一个随机数a,在测试。选取较小的a值,以保证速度。做5次 Rabin-Miller测试如果p在其中失败,从新产生p,再测试。

在Sparc II上实现: 2 .8秒产生一个256位的素数
24.0秒产生一个512位的素数
2分钟产生一个768位的素数
5.1分钟产生一个1024位的素数
发表于 2008-9-3 09:47 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

这是在网上摘录的吧?
一般来说密码学的书上会提到,但会更多的提到Rabin-Miller的算法!
无论哪种算法只要用费马小定理:其时间复杂度为:
设素数p的位长为n。复杂度=O(n^3)
发表于 2008-9-3 11:39 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

我觉的关键是不是概率性测试,如果不是概率性测试,即使速度慢一些,也是很有意义的
 楼主| 发表于 2008-9-3 21:59 | 显示全部楼层

一款可瞬间判定素数的神奇小软件

设素数p的位长为n。复杂度=O(n^3)
&&&&&&&&&&&&&&&&&&&&&&
不明白什么叫复杂度?
是不是说例如1000位 需要5分钟,2000位就需要 5^3分钟?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-6-17 03:46 , Processed in 0.083947 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表