一读小说 » 都市言情 » 学霸的另类养成 » 第22章 微小的学术贡献

第22章 微小的学术贡献

    验证一个超大数是素数除了试除法之外,还有很多别的方式。

    譬如说证明一个超大数是素数的方法可以使用Miller-Rabin素数测试。

    Miller-Rabin素数测试是一种概率性测试,可以高概率确定一个数是否为素数。

    以下是使用Miller-Rabin素数测试证明一个超大数是素数的一般步骤:

    选择一个适当的测试次数(通常是几十到几百次),记为k。

    将待检查的超大数减1,得到数n-1。

    将n-1分解为d*2^s的形式,其中d是奇数,s是非负整数。即n-1=d*(2^s)。

    对于每个测试次数,选择一个随机整数a,满足1<a<n-1

    计算a^dmodn,并检查结果是否为1或n-1。

    如果结果是1或n-1,则进行下一次测试。

    如果结果不是1且不是n-1,则进行s-1次迭代计算:计算(a^d)^2modn,依次重复。

    如果在k次测试中的任何一次迭代中得到的结果不是1且不是n-1,则n不是素数。

    如果在k次测试中所有迭代中都得到的结果都是1或n-1,则n很可能是素数。

    需要注意的是,由于Miller-Rabin素数测试是概率性的,有一定的错误概率。

    但是,通过增加测试次数k,可以将错误概率降低到非常小的程度。

    这个过程听起来要比试除法繁琐很多。

    但从计算复杂度的角度来出发,Miller-Rabin素数测试的时间复杂度是多项式复杂度。

    具体而言,它的时间复杂度为O(k*log₂(n)*(log₂(n))³),其中k是测试次数,n是待检查的超大数。

    在Miller-Rabin素数测试中,迭代次数是由测试次数k决定的。

    每次迭代的计算包括取模运算和幂运算,它们的复杂度都是多项式级别的。

    与指数复杂度的算法相比,多项式复杂度的算法在处理超大数时更加高效。

    尽管Miller-Rabin素数测试是一种概率性测试,但随着测试次数的增加,错误概率可以降低到极小的程度。

    虽然Miller-Rabin素数测试具有多项式时间复杂度,但如果是对于比超大数还要大的数(也就是是说对于一些动辄千万位的数非常大的数),想要验证其是不是素数仍然需要相当大的计算资源和时间才能完成测试。

    甚至于在实际应用中,常常会结合其他优化技术和算法来提高素数测试的效率。

    而如何验证一个数是不是梅森素数呢?

    首先梅森素数也是素数的一种。

    因此要先判定这个数是素数。

    而后再验证这个数是否符合梅森素数的定义。

    具体来说,可以依靠Lucas-Lehmer测试即卢卡斯-莱默检验法。

    卢卡斯-莱默检验法(Lucas-Lehmertest)是一种用于验证梅森素数的特定形式的素数测试方法。

    它仅适用于梅森素数的验证(形如2^p-1的素数,其中p是一个素数。)

    卢卡斯-莱默检验法的原理如下:

    初始化s=4。

    重复进行以下步骤p-2次:计算s的平方减去2,并将结果对2^p-1取模,即s=(s^2-2)%(2^p-1)。

    如果最终得到的s等于0,则该数2^p-1是素数;否则,它不是素数。

    卢卡斯-莱默检验法是一种确定性的测试方法,可以准确判断形如2^p-1的数是否为素数。

    需要注意的是,卢卡斯-莱默检验法只适用于特定形式的梅森素数,即形如2^p-1的素数。

    尽管该算法对于这类素数非常高效,但并不适用于一般的素数验证。对于一般的素数,其他素数测试算法如Miller-Rabin素数测试更为常用和有效。

    该算法的时间复杂度为O(p^2),其中p是待验证的素数。

    按照这个说法来说,如果秦飞提交了“2的74207281次方-1是梅森素数”这个结论之后。

    为了对这个结论进行验证,74207281是输入规模(或问题的大小),那么执行该算法的时间将取决于该数的平方。

    即相应的算法时间复杂度为O(74207281^2))=O(5503401983592961)。

    需要注意的是,时间复杂度仅提供了算法执行时间增长的大致趋势和量级估计,并不能直接转化为具体的执行时间。

    实际的执行时间还受到多种因素的影响,包括计算机硬件、算法实现的优化程度、输入数据的特征等。

    因此,对于如此大的输入规模,具体的执行时间将取决于实际执行环境和算法的实现细节。

    一般来说,对于O(5503401983592961)这种时间复杂度的问题。

    并不是所有的计算资源和现有计算机系统都能驾驭如此棘手的问题。

    不过对于应用了分布式计算的GIMPS项目应该是问题不大的。

    即便是有一点小问题,这也不是秦飞所关心的。

    秦飞要做的只是将“2的74207281次方-1是梅森素数”这个结论进行程序化的提交就完事了。

    至于具体如何验证这工作倒是跟秦飞关系不大。

    虽然具体如何验证之类的内容跟秦飞关系不大,但秦飞却不能无视这些。

    即便是很多平平无奇的成果甚至是很多云淡风轻般得出的学术进步也不是一蹴而就达成的。

    一点点微小的成果的出现其背后所历经的艰辛是难以想象的。

    这可能需要动用庞大的人力资源甚至是计算资源。

    一个平平无奇的项目背后往往有着无数搬砖的人在默默付出。

    只看到一门学科华丽的外表却看不到背后的各种艰辛是不应该的。

    -----------------

    秦飞没怎么费力就完成了GIMPS中相应的账号的注册。

    并且完成了“2的74207281次方-1是梅森素数”这个结论提交。

    不过饶是如此,事情也并没有结束,怎样让自己提交的这个结论被注意到呢?

    毕竟每天GIMPS中要处理的数据是相当庞大的。

    甚至于直接提交结论的这种行为严格来说都是有点不合正常操作流程的。

    不过此时的GIMPS项目管理还不像15年之后那么严格。

    一个不太合乎流程的数据提交别被无视就不错了,又怎么能奢望被重视对待呢?

    不过似乎这不重要了,因为秦飞发现随着其完成了“2的74207281次方-1是梅森素数”这个结论提交。

    一向沉寂的系统居然有了新的反应:

    【宿主发掘并提交了新的梅森素数,宿主做出了微小的学术贡献,奖励宿主10点学术积分】

    【宿主拥有了学术积分,现已为宿主开启系统商城,凭借着学术积分,宿主可以在新开启的系统商城中进行自由兑换】

    【当前宿主所拥有的学术积分:10点】

    【当前系统等级为lv0,升级进度0/1】