快速幂算法

📌 核心概念

快速幂(Fast Power)通过二进制拆分,将幂运算从O(n)优化到O(log n)。

原理:

a^n = a^(2^k1 + 2^k2 + ... + 2^km)
    = a^(2^k1) * a^(2^k2) * ... * a^(2^km)

💻 算法实现

🎯 经典应用

💡 算法技巧

1. 二进制拆分

例如:3^13
13的二进制:1101

3^13 = 3^(8+4+1)
     = 3^8 * 3^4 * 3^1
     = 6561 * 81 * 3
     = 1594323

📊 复杂度对比

方法时间复杂度空间复杂度适用场景
暴力乘法O(n)O(1)n很小
快速幂O(log n)O(1)n很大
矩阵快速幂O(k³ log n)O(k²)递推问题,k为矩阵维度

Go 代码

// 整数快速幂
func quickPow(a, n int) int {
    result := 1
 
    for n > 0 {
        if n&1 == 1 {
            result *= a
        }
        a *= a
        n >>= 1
    }
 
    return result
}
 
// 快速幂取模
func quickPowMod(a, n, mod int) int {
    result := 1
    a %= mod
 
    for n > 0 {
        if n&1 == 1 {
            result = (result * a) % mod
        }
        a = (a * a) % mod
        n >>= 1
    }
 
    return result
}
 
// Pow(x, n)
func myPow(x float64, n int) float64 {
    if n < 0 {
        x = 1 / x
        n = -n
    }
 
    result := 1.0
 
    for n > 0 {
        if n&1 == 1 {
            result *= x
        }
        x *= x
        n >>= 1
    }
 
    return result
}

🎯 经典题目

题目LeetCode关键点
Pow(x, n)50快速幂
超级次方372递归+快速幂
第N个神奇数字878二分+容斥
矩形区域不超过K的最大数值和363前缀和+二分

返回:数学算法