📅  最后修改于: 2023-12-03 15:10:08.122000             🧑  作者: Mango
指数平方,也称为快速模乘法,是运用了二进制的思想,将指数以二进制拆分成“1”和“0”的组合,通过不断平方、取模和乘法,来实现快速求解幂的运算,提高程序的效率。下面将展示一段Python代码来实现该算法。
def fast_exp(base, exponent, mod):
"""
使用快速模乘法实现指数运算,即(base^exponent)%mod
:param base: 底数
:param exponent: 指数
:param mod: 模数
:return: 结果
"""
result = 1
while exponent != 0:
if exponent & 1 == 1:
result = (result * base) % mod
base = (base * base) % mod
exponent >>= 1
return result
上述代码中的fast_exp
函数,接收三个参数 base
,exponent
和mod
,分别代表底数,指数和模数。该函数的返回值是 (base^exponent)%mod
。
该方法的核心思想是将指数转化为二进制形式,例如 $7$ 可以表示为 $111_2$,则
$base^7=base^{2^0+2^1+2^2}=base^{2^0}\times base^{2^1}\times base^{2^2}$
在计算过程中,需维护一个中间结果变量 result
,其初值为 $1$。每次进入循环,检查指数的二进制形式的最后一位是否为1,如果为1,则将当前的 base
与 result
相乘并对 mod
取模,将结果保存在 result
变量中。然后,将 base
乘以自身对 mod
取模,将结果保存在 base
变量中,指数 exponent
右移一位(即将二进制数向右移动一位),以便下一步检查指数二进制数的下一位。在这样的过程中,将指数不断的缩小,指数最终变成0时,所保存的结果即为fast_exp
返回的结果。
下面是一个演示的例子,求 $3^{2019}\mod6$。
将指数2019的二进制表示为:$11111100011$。
执行过程如下:
经过计算,可得到 $3^{2019}\mod6 =3$。
通过将指数转化为二进制数的形式,并通过平方和取模的方式来计算数值,快速模乘法提供了一种高效求解幂的算法。对于大数计算,该算法能够明显地提升程序效率,值得应用到实际项目中。