我需要使用 Python 计算非常大的数字。
它可能大到
factorial(n x 10,000,0000)*factorial(n x 10,000,0000)
所以我认为在普通的 32 位计算机上它会溢出......
有解决方法吗?
我需要使用 Python 计算非常大的数字。
它可能大到
factorial(n x 10,000,0000)*factorial(n x 10,000,0000)
所以我认为在普通的 32 位计算机上它会溢出......
有解决方法吗?
这在 Python 下不是问题。
>>> 2**100
1267650600228229401496703205376L
Python 自动将普通整数转换为长整数并且不会溢出。
http://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex
斯特林对 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) GB 的 RAM,假设 Python 可以完美有效地存储该数字。
一台 32 的机器最多可以寻址 4GB 的 RAM,因此理论上可以计算 n = 1 或 2,但对于 n = 3,机器甚至无法将结果保存在 RAM 中。当您计算结果时,Python 将不得不在 RAM 中保存多个 bignums(例如,临时变量),因此实际内存使用量将高于上述计算建议的值。
在实践中,我希望在具有大量 RAM 的 64 位机器上,您永远无法在 Python 中得到此计算的结果——机器将花费所有时间进行垃圾收集。
据我所知,Python (3) 中的整数可以任意大。