【发布时间】:2014-07-08 16:10:08
【问题描述】:
我正在尝试在 Python 中计算一些 num1**num2。但问题是num1 是93192289535368032L 和num2 是84585482668812077L,这是非常大的数字。
我尝试了以下几种方法:首先,我尝试使用**运算符进行计算。但是花了太多时间(我等了大约2个小时,但没有得到结果)。
其次,我使用了math.pow(num1, num2)。但我得到了这个:
Traceback (most recent call last): File "<pyshell#23>", line 1, in <module>
math.pow(84585482668812077L, 93192289535368032L)
OverflowError: math range error
最后我用numpy.power:
numpy.power(84585482668812077, 93192289535368032)
-9223372036854775808
如你所见,它给了我负数。
我真正想做的是result = (num1**num2),然后是result % num3。所以,我需要有效地计算这个功率值。
我该怎么做?
【问题讨论】:
-
既然你在做
(num1 ** num2) % num3,你应该看看Fermat's Litte Theorem的泛化。在维基百科上查找 -
@sshashank124 感谢您的参考。
标签: python python-2.7 math numpy