我需要使用Python计算非常大的数字。
可能与
一样大factorial(n x 10,000,0000)*factorial(n x 10,000,0000)
所以我认为在通常的32位计算机上它溢出......
有解决方法吗?
答案 0 :(得分:3)
这不是Python下的问题。
>>> 2**100
1267650600228229401496703205376L
Python会自动将普通整数转换为长整数,并且不会溢出。
http://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex
答案 1 :(得分:1)
答案 2 :(得分:1)
斯特林近似于n!是(n / e)^ n * sqrt(2 * pi * n)。这大约有n * log(n / e)个数字。
你正在计算(n * 1e8)!^ 2。这将具有大约2 * n * 1e8 * log(n * 1e8 / e)数字,其为2e8 * n *(17 + log(n))。假设n相对较小且log(n)可忽略不计,则为3.4e9 * n位。
您可以在一个字节中存储大约2.4位数字,因此您的结果将使用(1.4 * n)千兆字节的RAM,假设Python可以完全有效地存储该数字。
32台机器最多可以处理4GB的RAM,因此理论上可以计算n = 1或2,但是对于n = 3,机器甚至无法将结果保存在RAM中。在计算结果时,Python将不得不在RAM中保存多个bignums(例如,临时变量),因此实际内存使用量将高于上述计算结果。
在实践中,我希望在64位机器上有足够的内存,你无法在Python中进行这种计算 - 机器将花费所有时间进行垃圾收集。
答案 3 :(得分:0)
据我所知,Python(3)中的整数可以任意大。