当然,尽管是确定了阅读顺序,林枫也没有马上开始。
任何星辰大海那都是遥远的梦想,想要追求遥远的梦想这没什么。
但前提是要在此之前不需要为物质而烦恼。
想想那令人压抑的信用卡账单,林枫就一个头两大。
林枫现在还得为物质奔波。
「去码头整点薯条.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次计算。
则总时间为 0.0742 秒。
理论上,一台超级计算机可以在不到 0.1 秒的时间内验证 2^ - 1 是否是一个梅森素数。
到林枫这却这么久还没出结果?
只能说实属正常。
毕竟林枫估算时是按照一台超算全部算力都用于验证这样情况进行的估算。
但如果用来验证林枫这些成果动用的并不是全部算力,那么实际速度往往要大打折扣。
这么久还没出结果,林枫估计实际分配的算力额甚至可能连这台超算0.01%的算力都不到。
不然,但凡是分配的算力多一点,林枫估计也早就搞完验证了。
虽然情有可原。
但林枫现在可是等着这两组梅森素数快快通过验证然后搞一波50万美元的资金呢。
结果现在这么拖沓可还行。
搞钱这么慢,岂不是影响林枫奔向星辰大海的速度。
而且眼看着信用卡账单越积越高,林枫不能不着急。
林枫登上了推特,顺手艾特了加州大学洛杉矶分校高性能计算实验室: