如何 pow 和 mod 大数字

How to pow and mod giant numbers

我想对一个数进行次幂运算,然后将它与另一个数相乘,最后 mod 它。

Python 的 pow 函数,需要 3 个参数不能用于我的用例场景,所以我试图找到快速的替代方法。

示例:

我知道我能做到

9^10%2

作为

pow(9, 10, 2)

但是我做不到

(8*9^10)%2

功能相同

我已经试过了(数字仅供参考,实数要大很多)

pow(9, 10)*8 % 2 # tooks too long
pow(9, 10, 2)*8  # returns wrong answer

我希望我的数字计算得非常快,即使它们高达 10^18。对于其中的 20 个数字,我的时间要求是 2 秒。

None 上述解决方案对我来说并不适用,它们要么太慢,要么没有 return 正确答案。

您的第二个解决方案包含一个不正确的假设,即以下内容为真。直觉上,这不可能是真的,因为第一个表达式可能与 c*(n-1) 一样大,但第二个表达式必须严格小于 n

((a^b)%n)*c == (c*a^b))%n

来自 Wikipedia 的正确身份:

ab mod n = [(a mod n)(b mod n)] mod n.

我们可以通过归纳来概括这一点(证明作为练习留给 reader):

所以你的表达应该是:

(pow(9, 10, 2) * (8 % 2)) % 2
# OR
(pow(9, 10, 2) * 8) % 2