一般思路的求幂函数会是如下所示:
以上函数算法复杂度为O(n),快速幂算法可以将幂运算的算法复杂度降到O(logn)。原理如下。
比如计算3^13,因为13的二进制表示为1101,所以:
(注:中括号内为二进制表示)
类似的,我们对于所有幂运算都可以化成以上形式,算法复杂度由原来的O(n)变为O(logn),矩阵快速幂运算代码实现如下:
(注:Matrix为矩阵)
应用(快速计算斐波那契数列):
一般计算斐波那契数列我们用递推的方法:
如果我们要求斐波那契数列的第一亿项,递推求值的方式将会花费很长的时间。
由于f(n) = f(n - 1) + f(n - 2),所以
推出
至此我们就可以在求斐波那契数列中应用上快速幂运算了: