python:计算极其庞大的数字

时间:2013-07-28 10:11:40

标签: python

我需要使用Python计算非常大的数字。

可能与

一样大
factorial(n x 10,000,0000)*factorial(n x 10,000,0000)

所以我认为在通常的32位计算机上它溢出......

有解决方法吗?

4 个答案:

答案 0 :(得分:3)

这不是Python下的问题。

>>> 2**100
1267650600228229401496703205376L

Python会自动将普通整数转换为长整数,并且不会溢出。

http://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex

答案 1 :(得分:1)

您想使用bignumsPython原生地拥有它们。

答案 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)中的整数可以任意大。