Python中的指数计算

Eug*_*ash 7 python optimization largenumber exponentiation

在尝试使用Euler 99时,我注意到这些操作需要不同的时间:

>>> 632382**518061  # never finishes..

>>> 632382**518061 > 519432**525806  # finishes in few seconds
True
Run Code Online (Sandbox Code Playgroud)

我想知道这是什么原因?

Jun*_*sor 12

事情是python尝试打印第一个结果.但是这个数字有数十亿个数字,并且python不会刷新输出,直到遇到换行符,即在将所有数字发送到标准输出之后.正如@abarnert所提到的,更糟糕​​的是,将数字转换为字符串以进行打印.这需要相当大的内存分配和处理能力.另一方面,第二个表达式只需要打印一个True.如果分配给第一个表达式,则可以检查它:

 >>> a = 632382**518061
Run Code Online (Sandbox Code Playgroud)

这样,数字的输出被抑制.