快速幂 (Binary Exponentiation)
Published: Sun Feb 15 2026 | Modified: Sat Feb 07 2026 , 6 minutes reading.
快速幂 (Binary Exponentiation)
引言:万亿步的问题
假设你需要计算 (3 的 1 万亿次方)。
- 朴素循环: 执行
3 * 3 * 3...一万亿次。这需要耗费极长的时间。 - 快速幂: 只需约 40 步 就能算出结果。
这个算法是现代密码学(RSA, Diffie-Hellman)的基石,在这些领域中,对巨大的数字进行取模幂运算是标准操作。
算法要解决什么问题?
- 输入: 底数 ,指数 ,通常还有一个模数 。
- 输出: 。
- 承诺: 使用 次乘法而不是 次来计算结果。
核心思想 (直觉版)
利用指数的二进制表示。 。 与其乘 3 十次,我们可以:
- 计算 。
- 平方得到 。
- 平方得到 。
- 平方得到 。
- 根据 10 的二进制位,组合我们需要的部分( 和 )。
算法是如何工作的?
- 初始化
result = 1。 - 当 时:
- 如果 是奇数(最后一位是 1),将
result乘以当前底数 。 - 将底数平方 ()。
- 将 除以 2(右移一位)。
- 如果 是奇数(最后一位是 1),将
典型业务场景
- ✅ 密码学: RSA 加密需要计算 ,其中 非常大。
- ✅ 矩阵幂: 通过矩阵快速幂,在 时间内计算第 个斐波那契数。
- ✅ 组合数学: 计算模逆元 () 以求解组合数 。
代码演示 (TypeScript)
function modPow(base: bigint, exp: bigint, mod: bigint): bigint {
let result = 1n;
base = base % mod;
while (exp > 0n) {
// 如果指数是奇数,乘到结果里
if (exp % 2n === 1n) {
result = (result * base) % mod;
}
// 底数平方
base = (base * base) % mod;
// 指数减半
exp = exp / 2n;
}
return result;
}性能与复杂度总结
- 时间: 。
- 空间: 。
小结:一句话记住它
“快速幂是‘倍增’的艺术。通过反复平方底数,它以指数级速度穿越指数,将不可能的计算任务瞬间完成。”
