搜索梅森素数的数学和计算机算法
魅力无穷的梅森素数

魅力无穷的梅森素数——香港科技大学方程2004年5月15日,美国国家海洋和大气局顾问、数学爱好者乔希·芬德利(Josh Findley)用一台装有2.4GH奔腾处理器的个人计算机,找到了目前世界上已知最大Z的梅森素数。
该素数为2的24036583次方减1(即224036583-1),它有7235733位数,如果用普通字号将这个数字连续写下来,它的长度可达3万米!它是2000多年来人类发现的第41个梅森素数,也是目前已知的最大素数。
世界上许多著名的新闻媒体和科学刊物都对这一消息进行了报道和评介,认为这是数学研究和计算技术中最重要的突破之一。
也许会有人感到奇怪:素数不就是在大于1的整数中只能被1和其自身整除的数吗?在数学和计算机科学高度发达的今天,为什么发现一个已知的最大素数竟如此困难?找到一个已知的最大梅森素数竟成了科学上的大事?是的,魅力无穷的梅森素数具有许多特异的性质和现象,千百年来一直吸引着众多的数学家和数学爱好者对它进行研究;虽然已经揭示了一些规律,但围绕着它仍然有许多未解之谜,等待着人们去探索。
梅森素数的由来马林·梅森(Marin Mersenne,1588–1648)是17世纪法国著名的数学家和修道士,也是当时欧洲科学界一位独特的中心人物。
他与大科学家伽利略、笛卡尔、费马、帕斯卡、罗伯瓦、迈多治等是密友。
虽然梅森致力于宗教,但他却是科学的热心拥护者,在教会中为了保卫科学事业做了很多工作。
他捍卫笛卡儿的哲学思想,反对来自教会的批评;也翻译过伽里略的一些著作,并捍卫了他的理论;他曾建议用单摆来作为时计以测量物体沿斜面滚下所需时间,从而使惠更斯发明了钟摆式时钟。
梅森对科学所作的主要贡献是他起了一个极不平常的思想通道作用。
17世纪时,科学刊物和国际会议等还远远没有出现,甚至连科学研究机构都没有创立,交往广泛、热情诚挚和德高望众的梅森就成了欧洲科学家之间的联系的桥梁。
许多科学家都乐于将成果寄给他,然后再由他转告给更多的人。
mersennetwister梅森旋转算法

mersennetwister梅森旋转算法梅森旋转算法(Mersenne Twister)是一种用于生成伪随机数的算法,它由1997年由松本真(Makoto Matsumoto)和西村雅史(Takuji Nishimura)发明。
该算法以其良好的随机性和高速度而广受欢迎,成为了很多编程语言中的标准伪随机数生成器。
梅森旋转算法的名称来自于梅森素数,因为该算法使用了一种名为梅森素数的特殊质数进行计算。
在计算机科学领域,梅森素数指的是一种形式为2- 1的素数,其中p也是一个素数。
梅森旋转算法使用了一个称为MT19937的梅森素数,因此得名为梅森旋转算法。
梅森旋转算法的主要优点是它能够生成高质量的伪随机数序列,并且具有很长的周期。
周期指的是在产生的随机数序列中,所有可能的数值都会在一定的时间内出现,并且不会重复。
对于一个长度为n的随机数序列,其周期的上限是2^n - 1。
梅森旋转算法的周期非常长,能够达到2^19937 - 1,这意味着在一般的应用中,几乎可以认为是无限周期。
梅森旋转算法的实现相对较为简单,使用起来非常方便。
在很多编程语言中,都内建了该算法的实现,只需要简单的调用相应的函数即可得到随机数。
并且,算法的性能也比较好,生成的随机数速度很快,适用于大部分的应用场景。
然而,梅森旋转算法也存在一些缺点。
首先,因为其算法是确定性的,即给定相同的种子(或者初始状态),生成的随机数序列总是相同的。
这在某些场景下可能不够安全,因为攻击者可以通过分析已知的随机数序列来推测种子,从而破坏系统的安全性。
其次,梅森旋转算法虽然有很长的周期,但在某些特殊情况下仍然可能出现周期性的重复。
比如,如果种子的选择不够随机,或者使用了相同的种子,那么生成的随机数序列可能表现出明显的规律性,这就降低了算法的随机性。
另外,由于梅森旋转算法是一个线性递归算法,其内部使用了一系列的线性操作来产生随机数,这使得在某些统计测试中可能会出现一些问题,导致生成的随机数序列在统计上并不符合随机性的要求。
梅森公式_精品文档

梅森公式
1. 简介
梅森公式(Mersenne formula),是指由法国数学家梅森(Marin Mersenne)在17世纪提出的一种用于生成素数的公式。
梅森公式的基本形式为2^n - 1,其中n是一个自然数。
如果2^n - 1是一个素数,则称之为梅森素数。
梅森公式产生的素数被广泛应用在密码学、计算机科学、通信领域等。
由于其计算简单、结构规律清晰,梅森公式较早被发现,至今为止已知的最大梅森素数为2^82,589,933 - 1。
本文将介绍梅森公式的原理、应用以及一些相关的数学定理。
2. 梅森公式的原理
梅森公式是基于二进制表示的思想,通过将2的幂次方相减得到一个整数,并判断该整数是否为素数。
其基本形式为:
M(n) = 2^n - 1
其中,M(n)为梅森素数。
梅森公式的原理是因为2^n - 1可以通过一种高效的算法进行计算,被称为。
美科学家发现第46个梅森素数

美科学家发现第46个梅森素数美科学家发现第46个梅森素数243112609-1,这个在普通人看起来颇为奇特的数字,近来正让国际数学界乃至科技界为之欣喜若狂。
这是人类迄今为止发现的第46个也是最大的梅森素数。
243112609-1,也就是2自身相乘43112609次减1,它有12978189位数,如果用普通字号将这个巨数连续写下来,这个梅森素数的长度可超过50公里!去年秋季,美国加州大学洛杉矶分校(UCLA)的计算机专家埃德森·史密斯利用数学系所有的计算机参加了一个名为“因特网梅森素数大搜索”(GIMPS)的国际合作项目,前不久他在其中的一台计算机上偶然发现了这个超大的素数。
有关专家花了两周时间进行验证,最后证实了史密斯的发现。
9月16日,GIMPS网站正式向外界公布这一消息。
梅森素数的诱惑素数也叫质数,是只能被自己和1整除的数,如2、3、5、7、11等。
2300年前,古希腊数学家欧几里得证明了素数是无限的,并提出少量素数可写成“2p-1”的形式,这里的指数p也是一个素数。
由于这种素数具有许多独特的性质和无穷的魅力,千百年来一直吸引着众多的数学家和无数的数学爱好者对它进行研究和探寻。
17世纪法国著名数学家、法兰西科学院奠基人马林·梅森是其中成果较为卓著的一位,因此后人将“2p-1”型的素数称为梅森素数。
迄今为止,人类仅发现46个梅森素数。
梅森素数珍奇而迷人,因此被人们称为“数海明珠”。
梅森素数貌似简单,但研究难度却极大。
它不仅需要高深的理论和纯熟的技巧,而且还需要进行艰巨的计算。
1772年,瑞士数学大师欧拉在双目失明的情况下,靠心算证明了231-1(即2147483647)是第8个梅森素数。
这个具有10位的素数,堪称当时世界上已知的最大素数。
欧拉的毅力与技巧令人赞叹不已,他也因此被誉为“数学英雄”。
探究梅森素数不仅极富挑战性,而且对研究者来说有一种巨大的自豪感。
1963年9月6日晚上8点,当第23个梅森素数211213-1通过大型计算机被找到时,美国广播公司(ABC)中断了正常的节目播放,在第一时间发布了这一重要消息。
梅森素数--美丽的贝壳

梅森素数--美丽的贝壳⼀、价值五万美元的素数2000年4⽉6⽇,住在美国密歇根州普利茅茨的那扬·哈吉拉特⽡拉(Nayan Hajratwala)先⽣得到了⼀笔五万美元的数学奖⾦,因为他找到了迄今为⽌已知的最⼤素数,这是⼀个梅森素数:2^6972593-1。
这也是我们知道的第⼀个位数超过⼀百万位的素数。
精确地讲,如果把这个素数写成我们熟悉的⼗进制形式的话,它共有两百零九万⼋千九百六⼗位数字,如果把它以这个形式写下来,⼤约需要150到200篇本⽂的篇幅。
可是哈吉拉特⽡拉先⽣并不是⼀个数学家,他甚⾄很可能对寻找素数的数学理论⼀⽆所知——虽然这使他赢得了这笔奖⾦。
他所做的⼀切,就是从互联⽹上下载了⼀个程序。
这个程序在他不使⽤他的奔腾II350型计算机时悄悄地运⾏。
在经过111天的计算后,上⾯所说的这个素数被发现了。
⼆、梅森素数我们把⼀个⼤于1的⾃然数叫作素数,如果只有1和它本⾝可以整除它。
如果⼀个⽐1⼤的⾃然数不是素数,我们就叫它合数。
1既不是素数,也不是合数。
⽐如说,你很容易就可以验证7是⼀个素数;⽽15是⼀个合数,因为除了1和15外,3和5都可以整除15。
根据定义,2是⼀个素数,它是唯⼀的偶素数。
早在公元前三百年的古希腊时代,伟⼤的数学家欧⼏⾥德就证明了存在着⽆穷多个素数。
关于素数,有许多既简单⼜美丽,但是极为困难的,到现在还没有答案的问题。
其中有著名的哥德巴赫猜想,它是说任何⼀个⼤于6的偶数,都能表⽰为两个奇素数之和。
还有孪⽣素数问题。
象5和7,41和43这样相差2的素数对,被称为孪⽣素数。
孪⽣素数问题是说:是不是有⽆穷多对孪⽣素数?这⾥要顺便提⼀下的是,这些看起来很简单的数学问题,它们的解决⽅法将⼀定是极其复杂的,需要最先进的数学⼯具。
如果你不是狂妄到认为⼏百甚⾄⼏千年来所有在这些问题上耗费了⽆数聪明才智的数学家(有许多是⾮常伟⼤的)和数学爱好者加起来都不如你聪明,就不要试图⽤初等⽅法去解决这些问题,徒费时间和精⼒。
梅森素数

梅森素数维基百科,自由的百科全书跳转到:导航, 搜索梅森数是指形如2n− 1的数,记为M n;如果一个梅森数是素数那么它称为梅森素数。
∙梅森数是根据17世纪法国数学家马兰·梅森的名字命名的,他列出了n≤ 257的梅森素数,不过他错误地包括了不是素数的M67和M257,而遗漏了M61、M89和M107。
梅森数不一定皆为质数,以下即是梅森质数及非质数梅森数的例子:∙M2 = 22− 1 = 3、M3 = 23− 1 = 7 是素数。
∙M4 = 24− 1 = 15 不是素数。
目录[隐藏]∙ 1 相关命题和定理o 1.1 梅森数和梅森素数的性质o 1.2 梅森数和梅森素数的关系o 1.3 梅森数的素性检验o 1.4 与完全数的关系∙ 2 相关问题和猜想∙ 3 寻找梅森素数o 3.1 梅森素数列表∙ 4 外部链接[∙。
∙q≡ 3 mod 4 为素数。
则2q+1也是素数当且仅当2q+1 整除M q。
∙拉马努金给出:方程M q= 6+x2当q为3、5和7时有三个解;q 为合数时有2个解。
∙如果p是奇素数,那么任何能整除2p− 1的素数q都一定是1加上一个2p的倍数。
例如,211− 1 = 23×89,而23 = 1 + 2×11,89 = 1 + 8×11。
∙如果p是奇素数,那么任何能整除2p− 1的素数q都一定与同余。
[编辑]梅森数和梅森素数的关系下面的命题关注什么样的梅森数是梅森素数。
▪a≡ 1 mod 2q▪a≡±1 mod 8o欧拉的一个关于形如1+6k的数的理论表明:M q是素数当且仅当存在数对(x,y)使得M q= (2x)2 + 3(3y)2,其中q ≥ 5。
o最近,Bas jansen 研究了等式Mq = x2 + dy2(0≤d≤48),得出了一个对于d=3情况下的新的证明方法。
o Reix 发现q > 3时,M q可以写成:M q = (8x)2 - (3qy)2 = (1+Sq)2 - (Dq)2。
梅森素数公式

梅森素数公式
梅森素数公式
是计算梅森素数个数的公式。
它不是绝对公式,只是近似公式。
梅森素数公式
3*5/3.8*7/5.8*11/9.8*13/11.8*17/15.8*......*P/(p-1.2)-1=M
P梅森数的指数,M梅森数指数P以下的所有梅森素数的个数。
是根据梅森素数分布理论得出的,1为万数之首,1被除外,所以要减去1。
指数5,计算2.947,实际3 ,误差0.053;
指数7,计算3.764,实际4 ,误差 0.236;
指数13,计算4.891,实际5,误差0.109;
指数17,计算5.339,实际6,误差0.661;
指数19,计算5.766,实际7,误差1.234;
指数31,计算6.746,实际8,误差1.254;
指数61,计算8.445,实际9,误差0.555;
指数89,计算9.201,实际10,误差0.799;
指数107,计算9.697,实际11,误差1.303;
指数127,计算10.036 ,实际12,误差1.964;
指数521,计算13.818,实际13,误差-0.818;
指数607,计算14.259,实际14,误差-0.259;
指数1279,计算16.306,实际15,误差-1.306;
指数2203,计算17.573,实际16,误差-1.573;
指数2281,计算17.941,实际17,误差-0.941;
.....
本来P-1就行了,因于素因子的重叠,这个公式是P-1.2,随着梅森数的增大,重叠更多,计算的数会比实际的越来越少。
【高中数学】寻找梅森素数

【高中数学】寻找梅森素数挪威计算机专家奥德斯特林德莫通过参加一个名为“因特网梅森素数大搜索”(gimps)的国际合作项目,最近发现了第47个梅森素数,该素数为“242643801-1”。
它有12837064位数,如果用普通字号将这个巨数连续写下来,它的长度超过50公里!梅森·普里姆的诱惑素数是在大于1的整数中只能被1和其自身整除的数(如2、3、5、7等等),素数有无穷多个。
而形如“2p-1”(p为素数)的素数称为梅森素数,以17世纪法国数学家梅森的名字命名。
梅森素数是数论研究的一项重要内容,也是当今科学探索的热点和难点之一。
早在公元前4世纪,古希腊数学大师欧几里德就率先探索了“2p-1”素数。
他在讨论原始几何中的完美数时研究了这个特殊的素数。
由于梅森素数有许多独特的性质和无穷的魅力,几千年来吸引了许多数学家和无数业余爱好者对它进行研究和探索。
2300多年来,只有47个梅森素数被发现。
因为这个素数稀有而迷人,所以被称为“数学宝藏”。
梅森素数的研究难度极大;它不仅需要高深的理论和纯熟的技巧,而且需要进行艰巨的计算。
1772年,被誉为“数学英雄”的欧拉在双目失明的情况下,以惊人的毅力靠心算证明了“231-1”是第8个梅森素数,该素数有10位。
特别值得一提的是,经过多年的研究,中国数学家、语言学家周海忠于1992年首次给出了梅森素数分布的精确表达式,为人们探索梅森素数提供了方便;后来,这一重要成就在国际上被称为“周氏猜想”。
网格技术来助力网格这一新技术的出现,使得对梅森素数的探索更加有力。
1996年初,美国数学家和程序员沃尔特曼编写了一个梅森素数计算程序,并将其发布在网页上,供数学家和业余爱好者免费使用;这就是著名的GIMPS项目。
该项目采用网格计算,利用大量普通计算机的空闲时间获得相当于超级计算机的计算能力。
为了激励人们寻找梅森素数和促进网格技术发展,设在美国的电子新领域基金会(eff)于1999年3月向全世界宣布了为通过gimps项目来寻找新的更大的梅森素数而设立的奖金。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
梅森素数的数学和计算机算法的一些知识本页面讨论用于高效地搜索梅森素数的数学和计算机算法的一些知识。
由于相对于数学家,我更多地是计算机程序员,因此我将不深入到太多的数学细节中,而是设法提供链接代替。
生成一个列表(Forming a list)很容易证明,如果 2p-1 是素数,则 p 也一定是素数。
因此,搜索梅森素数的第一步就是生成一个用于测试的素数指数列表。
试验分解因子(Trial Factoring)下一步是通过寻找小因子来排除一些指数。
有一个非常高效的算法判断一个数是否能整除2p-1。
例如,让我们看一下 47 是否能够整除 223-1。
把指数 23 转换成二进制数,我们得到10111。
从 1 开始,重复以下步骤:平方,删除指数的最左边二进位,如果该位是 1,则将平方后得到的值乘以 2,然后计算其除以 47 后的余数。
删除最左如果需要就除以47平方边二进位乘以 2 的余数------------ ------- ------------- ------1*1 = 1 1 0111 1*2 = 2 22*2 = 4 0 111 no 44*4 = 16 1 11 16*2 = 32 3232*32 = 1024 1 1 1024*2 = 2048 2727*27 = 729 1 729*2 = 1458 1因此,223 = 1 mod 47。
两边同时减 1,223-1 = 0 mod 47。
因此我们知道 47 是一个因子,从而 223-1 不是素数。
可以证明梅森数有一个非常好的性质:2p-1 的任何因子 q 必定是 2kp+1 的形式,并且 q 除以 8 的余数一定是 1 或者 7。
最后,一个高效的程序可以利用任何可能的因子 q 必须是素数这一事实。
GIMpS 程序的分解因子代码使用修正的厄拉托森斯(Eratosthenes)筛法,利用一个二进位表示一个可能的 2kp+1 形式的因子。
这个筛排除能够被大约 40,000 以下的素数整除的任何可能的因子。
同样,表示除以 8 的余数是 3 或者 5 的可能的因子的二进位被清除。
这个过程排除大约百分之九十五的可能的因子。
剩下的可能的因子使用上面描述的高效的算法进行测试。
现在唯一的问题是要试验分解多少因子?答案取决于三个因素:分解因子的代价、发现一个因子的概率和素性测试的代价。
我们使用以下公式:分解因子的代价 < 发现因子的概率 * 2 * 素性测试的代价也就是说,分解因子所花费的时间必须小于期望被节省的时间。
如果能够发现一个因子,我们就能够避免进行首次素性测试和复查。
根据以前分解因子的数据,我们知道发现一个 2X到 2X+1之间的因子的概率大约是 1/X。
本程序进行素性测试和分解因子所需的时间已经被计算出来。
目前,本程序试图分解因子到:指数上限分解因子到----------- ------------3,960,000 2605,160,000 2616,515,000 2628,250,000 26313,380,000 26417,850,000 26521,590,000 26628,130,000 26735,100,000 26844,150,000 26957,020,000 27071,000,000 27179,300,000 272用 p-1 方法分解因子(p-1 Factoring)还有另外一个方法可被 GIMpS 程序用来搜索因子,因而避免进行素性测试的花费。
这个方法叫做波拉德(pollard)(p-1)方法。
如果 q 是某数的一个因子,并且 q-1 是高度复合的(也就是说 q-1 只有小因子),p-1 方法就可以找到因子 q。
该方法用于梅森数时甚至更高效。
回忆一下,因子 q 只能是 2kp+1 的形式。
只要 k 是高度复合时,就很容易修改 p-1 方法去搜索因子q。
p-1 方法是十分简单的。
在第一阶段我们挑选一个边界 B1。
只要 k 的所有因子都小于B1(我们称 k 为 B1-平滑(B1-smooth)),p-1 方法就能找到因子 q。
我们首先计算 E = (比 B1 小的所有素数的乘积)。
然后计算 x = 3E*2*p。
最后,检查 x-1 和 2p-1 的最大公约数,就可以知道是否找到一个因子。
使用第二个边界 B2, 我们可以改进波拉德算法,达到第二阶段。
如果 k 在 B1 到 B2 之间刚好有一个因子,而其它因子都小于 B1,我们就能够在第二阶段找到因子 q。
这个阶段要使用大量的内存。
GIMpS 程序使用该方法去寻找一些给人印象深刻的因子。
例如:22944999-1 能够被 314584703073057080643101377 整除.314584703073057080643101377 等于 2 * 53409984701702289312 * 2944999 + 1.值 k, 53409984701702289312, 是非常平滑的:53409984701702289312 = 25 * 3 * 19 * 947 * 7187 * 62297 * 69061 GIMpS 如何智能地选择 B1 和 B2 呢?我们使用试验分解因子方法中的公式的变种。
我们必须使下式取得最大值:发现因子的概率 * 2 * 素性测试的代价 - 分解因子的代价发现因子的概率和分解因子的代价都依赖于 B1 和 B2 的取值。
当 k 是 B1-平滑或者 k 是 B1-平滑并且在 B1 到 B2 之间刚好有一个因子时,迪克曼(Dickman)函数(参见克努特(Knuth)的《计算机程序设计艺术》第二卷(译注:中文版第347页))用来确定发现因子的概率。
本程序尝试许多 B1 的值,如果有足够的可用内存的话也尝试一些 B2 的值,用以确定使以上公式取得最大值的 B1 和 B2 的值。
卢卡斯-莱默测试(Lucas-Lehmer testing)卢卡斯-莱默素性测试是非常简单的:如果 p > 2, 2p-1 是素数当且仅当 Sp-2= 0,其中,S 0 = 4,SN= (SN-12 - 2) mod (2p-1)。
例如,证明 27 - 1 是素数的过程如下:S= 4S1= (4 * 4 - 2) mod 127 = 14S2= (14 * 14 - 2) mod 127 = 67S3 = (67 * 67 - 2) mod 127 = 42S4= (42 * 42 - 2) mod 127 = 111S5= (111 * 111 - 2) mod 127 = 0为了高效地实现卢卡斯-莱默测试,我们必须寻找对巨大的数进行平方及对 2p-1 取余的快速方法。
自二十世纪六十年代后期以来,对巨大的数进行平方的最快速的算法是:把巨大的数分裂成小片形成一个大数组,然后执行快速傅里叶变换(FFT),逐项平方,然后再进行快速傅里叶逆变换(IFFT)。
参见克努特的《计算机程序设计艺术》第二卷“乘法能有多快?”一节(译注:中文版第267页)。
1994年1月,由理查德·克兰多尔(Richard Crandall)和巴里·费金(Barry Fagin)合著的题为“离散加权变换和大整数算术”的计算数学文章,引入了无理底数 FFT 的概念。
这个改进使得计算平方的速度提高两倍以上,允许使用较小的 FFT,并且这一过程中自动执行了对2p-1 取余步骤。
虽然由于英特尔公司的奔腾处理器体系结构的原因,GIMpS 程序使用浮点 FFT,但彼得·蒙哥马利(peter Montgomery)给出的一个纯整数加权变换的方法也能够被使用。
正如上一段所提到的,GIMpS 使用汇编语言编写的浮点 FFT 算法,充分利用流水线和高速缓存。
因为浮点运算是不精确的,在每次迭代后浮点值舍入到整数。
本来该有的整数结果和程序计算出来的浮点结果之间的差异叫做“卷折误差”。
如果卷折误差超过 0.5 则舍入将产生不正确的结果 - 这意味着必须使用更大的 FFT。
GIMpS 程序的错误检查确保最大卷折误差不超过0.4。
不幸地,这种错误检查的代价相当高,以致于不能在每次平方后都进行检查。
存在另外一种代价很低的错误检查。
FFT 平方的一个性质是:(输入 FFT 值的和)2 = (输出 IFFT 值的和)由于我们使用浮点数,我们必须将上式中的“等于”改为“约等于”。
如果上式中两个值实质上不等,将给出一个在 readme.txt 文件中描述过的 SUMINp != SUMOUT 错误。
如果输入 FFT值的和是一个非法的浮点数(例如无穷大),将给出一个 ILLEGAL SUMOUT 错误。
不幸地,这种错误检查无法发现我们将在下一节中描述的所有错误。
卢卡斯-莱默测试发现一个新的梅森素数的概率有多大?一个简单的估计是再次利用发现一个 2X到 2X+1之间的因子的概率大约是 1/X 的事实。
例如,你已经使用试验分解因子证明210000139-1 没有比 264小的因子,那么它是素数的概率是: 没有 65 二进位因子的概率 * 没有 66二进位因子的概率 * ... * 没有 5000070 二进位因子的概率,即:64 65 5000069-- * -- * ... * -------65 66 5000070化简后得到:64 / 5000070,或者 1 / 78126。
这个简单的估计不是很准确,它给出的公式是: (试验分解因子到多大的指数) / (指数/2)。
进一步的工作表明更精确公式是:(试验分解因子到多大的指数-1) / (指数 * 欧拉常数(0.577...))。
在上例中,是 1 / 91623。
这个更精确的公式是未经证明的。
复查(Double-checking)为了核实首次的卢卡斯-莱默素性测试没有出错,GIMpS 程序运行第二次素性测试。
在每次的最低 64 二进位,叫做余数,被打印出来。
如果它们相同,GIMpS 宣测试期间,最终的 Sp-2称该指数已经被复查。
如果它们不相同,素性测试被再次运行直到最后出现匹配。
和首次测试相匹配的复查,通常是在首次测试之后大约两年进行。
GIMpS 分配复查给较慢的计算机,因为该指数比正在进行的首次测试的指数小,以便较慢的计算机能够在合理的时间内完成其工作任务。
的值GIMpS 复查采取进一步的防护措施以避免程序设计错误。
在开始卢卡斯-莱默测试之前,S被左移随机的二进位。
每次平方刚好加倍我们左移的 S 值。
注意对 2p-1 取余的步骤仅是简单地将第 p 位以上的位移到最低有效位,因此没有信息丢失。
为什么我们要自找麻烦呢?因为如果计算 FFT 的程序代码有错误,对 S 值的随机的移位确保第二次素性测试中的 FFT 算法处理一个和首次素性测试完全不同的值。