📜  Python中的模幂运算

📅  最后修改于: 2022-05-13 01:54:45.381000             🧑  作者: Mango

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

快速模幂算法已在链接中进行了更简要的解释