计算 a^n 时,若逐次乘 a 需要 O(n) 次乘法。快速幂利用 n 的二进制分解,将复杂度降为 O(log n)。
思路:n 写成二进制后,a^n = 连乘 a^(2^i),其中 n 的第 i 位为 1。每次将当前底数平方(a → a² → a⁴…),按 n 的位决定是否乘入结果。
若 n 的当前位为 1:结果 *= 当前底数;然后底数 *= 底数,n /= 2。
取模时在每步乘法后对模数取模即可,常用于大指数、组合数取模等。
结论:
| 步骤 | 当前位(bit) | base | result |
|---|
按 n 的二进制位从低到高,依次决定是否将当前底数乘入结果。左侧为序号,右侧为过程。
| 序号 | 过程 |
|---|