处理代码中的大数字

9 python algorithm

我正在编写一个编程问题,我需要处理一个涉及100000位数的数字.python可以处理这样的数字吗?

Ale*_*lli 23

正如其他答案所示,Python确实支持仅由可用内存量限制的整数.如果你想要更快的支持他们,试试gmpy(作为gmpy的作者和当前的共同维护者我当然有点偏见;-):

$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'x+1'
10000 loops, best of 3: 114 usec per loop
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y+1'
10000 loops, best of 3: 65.4 usec per loop
Run Code Online (Sandbox Code Playgroud)

通常情况下,算术不是处理这些数字的瓶颈(尽管gmpy直接支持某些组合和数论理论函数可能会有所帮助,如果你正在使用这些数字).将数字转换为十进制字符串可能是最常见的操作...:

$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'str(x)'
10 loops, best of 3: 3.11 sec per loop
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'str(y)'
10 loops, best of 3: 27.3 msec per loop
Run Code Online (Sandbox Code Playgroud)

如你所见,即使在gmpy大数字的字符串化中,也可能比简单的加法慢几百倍(唉,这是一个本质上复杂的操作!); 但在原生Python代码中,字符串化的比例比简单的添加慢万倍,所以你真的要注意这一点,特别是如果你决定不下载和安装gmpy(例如因为你可以' t:例如,Google App Engine目前不支持gmpy).

最后,一个中间案例:

$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'x*x'
10 loops, best of 3: 90 msec per loop
$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y*y'
100 loops, best of 3: 5.63 msec per loop
$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y*x'
100 loops, best of 3: 8.4 msec per loop
Run Code Online (Sandbox Code Playgroud)

正如你看到的,在原生Python代码相乘两个巨大的数字可能比简单的加法慢近1000倍,而与gmpy经济放缓小于100倍(这不是太糟糕,即使只有一个,如果该号码已经是gmpy的自己的格式,以便转换另一个的开销.


u0b*_*6ae 7

是; 的Python 2.x中有两种类型的整数,INT规模有限的和长期大小不受限制.但是,如果需要,所有计算都将自动转换为long.处理大数字工作正常,但如果你尝试打印100000个数字输出,或者甚至尝试从中创建一个字符串,那么其中一个较慢的事情就是如此.

如果您还需要任意十进制定点精度,则有十进制模块.


Nad*_*mli 4

当然可以:

>>> s = 10 ** 100000
Run Code Online (Sandbox Code Playgroud)