pow或**,用于Python中非常大的数字

时间:2014-05-20 11:53:14

标签: python python-2.7 math numpy

我正在尝试在Python中计算一些num1**num2。但问题是num193192289535368032Lnum284585482668812077L,这是非常大的数字。

我尝试了以下几种方法:首先,我尝试使用**运算符来计算它。但是花了太多时间(我等了大约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。所以,我需要有效地计算这个功率值。

我该怎么做?

1 个答案:

答案 0 :(得分:15)

您应该将num3作为第3个参数传递给pow

pow(...)
    pow(x, y[, z]) -> number

    With two arguments, equivalent to x**y.  With three arguments,
    equivalent to (x**y) % z, but may be more efficient (e.g. for longs).