如何计算并保存已知最大的素数?
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 个数字。
如何计算 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 个数字。