Post

ksm快速幂算法

快速幂算法通过二进制分解将幂运算的时间复杂度从O(n)优化到O(log n)。核心思想是将指数按二进制位拆解,例如a^13 = a^(1101₂) = a^8 × a^4 × a^1,只计算二进制位为1对应的幂次。算法每次循环将底数平方(a = a × a),指数右移一位(b »= 1),当最低位为1时(b & 1)才将当前底数乘入结果。相比普通方法需要999次乘法计算2^1000,快速幂只需约10次循环,性能提升近100倍。

1
2
3
4
5
6
7
8
9
int ksm(int a, int b) 
{
    int res = 1;
    while (b) {
        if (b & 1) res = res * a;
        a = a * a;
        b >>= 1; // 等价于 b /= 2
    }
}
This post is licensed under CC BY 4.0 by the author.