快速冪 (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;
}性能與複雜度總結
- 時間: 。
- 空間: 。
小結:一句話記住它
「快速冪是『倍增』的藝術。透過反覆平方底數,她以指數級速度穿越指數,將不可能的計算任務瞬間完成。」
