如何计算并保存已知最大的素数?

How to calculate and save the largest known prime number?

如何计算 2^74,207,281 − 1 并将其保存到文本文件?

第一个问题:打印时出现内存错误。如何确定我需要多少内存?

第二个问题:如何计算出最快的时间?

这个计算对我来说非常快,不会出现内存错误而且很准确:

>>> x = 2**74207281 - 1

开始于:

>>> x > 2**74207281
False
>>> x > 2**74207281 - 2
True

只是不要尝试将其打印出来,这会花费很长时间。尝试打印小而大的数字以了解多长时间...

哦,你要打印出来...

gmpy 包的数字具有更快的字符串化算法:

>>> x = 2**74207281 - 1
>>> import gmpy
>>> xx = gmpy.mpz(x)
>>> s = str(xx) # takes a few seconds.
>>> len(s)
22338618
>>> f = file("/tmp/bigprime.txt","w")
>>> f.write(s)
>>> f.close()

生成的文件有 2200 万个数字:

$ wc -c /tmp/bigprime.txt 
22338618 /tmp/bigprime.txt

函数 pow() 将通过平方使用求幂并且几乎是即时的:

>>> import math
>>> p = pow(2, 74207281) - 1
>>> math.log10(p)
22338617.477665834

因此它有 22338618 个数字。