Python中的模幂运算
给定三个数字 x、y 和 p,计算 (x^y) % p
例子:
Input: x = 2, y = 3, p = 5
Output: 3
Explanation: 2^3 % 5 = 8 % 5 = 3.
Input: x = 2, y = 5, p = 13
Output: 6
Explanation: 2^5 % 13 = 32 % 13 = 6.
上述解决方案的问题是,较大的 n 或 x 值可能会发生溢出。因此,功率通常在大数模下进行评估。
天真的乘法是 O(n),具有非常低的常数因子和 %m。
Pow函数在Python中以 O(log n) 时间计算,但如果你首先计算 x y的值,然后用 p 对其进行修改以获得 (x y ) % p 评估,则当数字足够大时,它会花费很多时间。
# Simple python code that first calls pow()
# then applies % operator.
a = 2
b = 100
p = (int)(1e9+7)
# pow function used with %
d = pow(a, b) % p
print (d)
输出:
976371285
在使用大量模数进行计算时,(%)运算符会花费大量时间,因此使用了快速模幂运算。 Python有pow(x, e, m)来计算模数,这需要更少的时间。 [详情请参考Python文档]
# Fast python code that first calls pow()
# then applies % operator
a = 2
b = 100
p = (int)(1e9+7)
# Using direct fast method to compute
# (a ^ b) % p.
d = pow(a, b, p)
print (d)
输出:
976371285
快速模幂算法已在链接中进行了更简要的解释