众所周知,当我们需要计算 $n^m$ 时,我们可以这么写:
def my_pow(n,m):
sum=n
for i in range(1,m+1):
sum*=i
return sum
但是,这样的效率实在太低了,时间复杂度为 $\mathcal{O}(n)$,于是便有了快速幂。
我们定义 $f(n,m)=n^m$,那么显然会有以下递推式:
$f(n,m)=\begin{cases}f(n,\frac{m}{2})^2&m \equiv0\pmod 2\\f(n,\lfloor\frac {m}{2}\rfloor)^2\times n&m \equiv1\pmod 2\end{cases}$
这样子,计算 $n^m$ 的复杂度就降到了 $\mathcal{O}(\log n)$ 。