iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0

更多分治例題

快速冪

快速冪算法是一種高效計算大整數指數冪的方法。傳統的方法是通過連續乘法來計算 a 的 b 次方,但當 b 非常大時,這種方法的效率非常低。快速冪算法通過分治的策略來減少所需的乘法操作,從而大大提高了效率。

通過將指數 b 分解成二進制表示,我們可以將 a 的 b 次方分解成較小的部分,每個部分都是 a 的某個 2 的冪。這樣,我們只需要計算 log(b) 個乘法,而不是 b 個乘法。

int fastPow(int a, int b) {
	if (b == 0) return 1;
	return fastPow(a, b / 2) * fastPow(a, b / 2) * (b & 1 ? a : 1);
}

或是也可以疊代的方式實作:

int fastPow(int a, int b) {
    int res = 1;
    while (b > 0) {
        if (b & 1) res *= a;
        a *= a;
        b >>= 1;
    }
    return res;
}


上一篇
Day 22 n 等分的新娘 其一
下一篇
Day 24 群星歸位...永恆的海底...資結升起...萬物歸一
系列文
CS補完計畫—演算法與資料結構的第三次衝擊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言