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

时间:2017-02-13 19:15:05

标签: python largenumber

如何计算- FMDB - chibi-ORM - sqlitepersistentobjects 并保存到文本文件?

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

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

2 个答案:

答案 0 :(得分:5)

这个计算对我来说非常快,不会给出内存错误并且确切地说:

>>> 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

答案 1 :(得分:2)

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

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

因此它有22338618位数。