假如现在要计算7的13次方,应该怎么做?
朴素的做法是7连乘13次,得到的结果是96,889,010,407,这个过程做了13次乘法计算。
除了这种朴素做法之外,还有一种方法叫快速幂算法。
我们在小学时候就学过,am+n = am · an,(am)n = amn。而13的二进制形式是11012 = 8 + 4 + 1,由此可知,713就等于78+4+1。所以我们只需要依次计算71、72、74、78(每一项都是前一项的平方),然后根据指数的二进制位是否为0来决定是否把结果乘入到最后的计算结果中即可。
也就是:
713
= 71+4+8
= 1x71 * 1x74 * 1x78 # 72对应的指数二进制位为0,不把它加入结果的计算中
= 1x71 * 1x(72)2 * 1x(74)2 # 只需要计算前一项的平方
= 96,889,010,407
通过Python3实现就是:
def fast_pow(base, exp):
result = 1
while exp > 0:
if exp & 1: # 当前最低二进制位为 1
result *= base
base *= base # 底数平方
exp >>= 1 # 指数右移一位,即除以 2
return result和朴素幂运算的13次乘法比起来,快速幂只进行了4次平方和3次乘法,计算时会快很多。
评论 (0)