当然,尽管是确定了阅读顺序,林枫也没有马上开始。
任何星辰大海那都是遥远的梦想,想要追求遥远的梦想这没什么。
但前提是要在此之前不需要为物质而烦恼。
想想那令人压抑的信用卡账单,林枫就一个头两大。
林枫现在还得为物质奔波。
「去码头整点薯条.jpg」
林枫记得当时加州大学洛杉矶分校高性能计算实验室可是在第一时间表示他们已经安排超算集群开始验证2^-1和2^-1是否是梅森素数了。
怎么这么久还没出结果呢?
虽然说漫无目的地去寻找梅森素数挺困难的。
但要通过超级计算机验证一个数是不是梅森素数还真不费劲。
一般来说,要验证 2^ - 1 是否是素数。
直接计算出这个数并检查它是否有其他因数是最容易想到的思路。
但这明显不可行。
像是2^ - 1这种超大数的位数太多,如果暴力因式分解挨个试肯定无法在合理的时间内完成。
不过也不是毫无办法。
卢卡斯-莱默测试可以有效简化这个过程。
在借助这个方法的情况下完全通过递归迭代序列验证是否满足特定条件。
具体步骤也不复杂。
此前在写论文的时候林枫还特别了解过这方面。
先是初始化设 S_0 =4 ,而后递归:计算 S_(n+1) = S_(n^2 - 2 )
模 2^p - 1 ,运算从 n = 1开始,直到 n = p - 2 为止。
如果最终结果 S_(p-2) 是 0,那么 2^p - 1 就是一个素数;否则它不是素数。
听起来依旧是有点麻烦的。
但对于超级计算机来说这完全是小儿科好不好。
而且由于卢卡斯-莱默测试的复杂度是线性时间复杂度,即 O(p),这意味着计算的时间与 p 成正比。
对于2^ - 1来说,只需要执行 次循环,每次计算一个模运算。
卢卡斯-莱默测试每次迭代中包含的运算量比较复杂,涉及到大整数的平方和模运算。
不过估算的话也不是没办法。
可以粗略假设每次迭代进行模运算需要进行约 10^6次计算。
这样计算的话,总的计算次数是:
*10^6 约等于 7.42*10^13次计算。
如果计算机每秒可以执行 10^15次计算。