python - 在代码中处理大数字

标签 python algorithm

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

最佳答案

如其他答案所示,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

通常,算术不是处理此类数字的瓶颈(尽管 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

如您所见,即使在 gmpy 中,大数字的字符串化也可能比简单的加法慢数百倍(唉,这是一个本质上复杂的操作!);但在 native Python 代码中,字符串化的次数比简单的加法慢 数万 倍,所以你真的要注意这一点,特别是如果你决定不下载和安装gmpy(例如,因为您不能:例如,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

如您所见,在 native Python 代码中将两个大数相乘几乎比简单的加法慢 1000 倍,而使用 gmpy 时减速不到 100 倍(甚至还不算太糟)如果只有一个,如果数字已经是 gmpy 自己的格式,这样就会产生转换另一个的开销。

关于python - 在代码中处理大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386604/

相关文章:

algorithm - 关键字搜索算法

java - 我想通过使用另一个带有交换方法的类而不是通常可用的通用交换函数来交换两个数字

python - 属性错误: module 'ssl' has no attribute 'PROTOCOL_TLSv1_3'

python - 有没有更快的方法使用 pyglet 和线程在屏幕上绘图?

python - 触发 select() 的函数

algorithm - 旅行的最短路径

python - 如何访问 Docker 容器内的应用程序文件?

python - 如何在 Pygame 中编写步行周期

c++ - 使用 win32 线程的矩阵乘法

确定语句/文本的正面或负面程度的算法