演算法筆記 快速冪

2021-08-21 13:21:51 字數 1387 閱讀 1705

快速冪就是快速的求底數的整數次方,比起樸素的方法o(n)的時間複雜度,其時間複雜度是o(log2n)。這是很不錯的乙個效率提公升。

ans = base ^exp

如果exp為奇數,那麼ans = ans * base;

如果exp為偶數,那麼ans = ans

然後每次base = base * base;並且每次迴圈指數減半,直到指數為0迴圈結束,ans就是所求結果。

例如求4^9

初始各成員的值分別為:ans = 1, base = 4,  exp = 9

1、第一次迴圈:指數exp=9為奇數,那麼

ans = ans * base = 4 

base = base * base = 4 ^ 2

指數減半,exp = 4

2、第二次迴圈:指數exp=4為偶數,那麼

ans = ans  = 4 

base = base * base = 4 ^ 4

指數減半,exp = 2

3、第三次迴圈:指數exp=2為偶數,那麼

ans = ans  = 4 

base = base * base = 4 ^ 8

指數減半,exp = 1

4、第四次迴圈:指數exp=1為奇數,那麼

ans = ans * base = 4^9 

base = base * base = 4 ^ 16

指數減半,exp = 0

迴圈結束,返回ans即所求結果。

可以看出,快速冪在求指數問題的時候,這裡只進行了4次的迴圈,log2n加1向下取整,而普通的方法是迴圈9次進行乘法,當指數非常大的時候,這個差距是越來越大的,o(n)顯然是比不上o(log2n)。

快速冪在計算的時候, 指數是成半的減少,並且底數同時也是成倍增加,如果這樣:base^1,base^2,base^4,base^8,.....。從兩個方面同時計算冪次方。而樸素求冪則是底數線性的增加base^1,base^2,base^3,base^4,.....。底數的增加速度就遠不及快速冪,並且指數的減少也是逐一減少。

double power(double base, int exponent) 

base = base *base; //底數進行乘方

exponent = exponent >> 1; //指數減半

} return ans;

}else

}

演算法提高快速冪(快速冪演算法詳解)

問題描述 給定a,b,p,求 a b mod p。輸入格式 輸入共一行。第一行有三個數,n,m,p。輸出格式 輸出共一行,表示所求。樣例輸入 2 5 3 樣例輸出 資料規模和約定 共10組資料 對100 的資料,a,b為long long範圍內的非負整數,p為int內的非負整數。所謂的快速冪,實際上...

快速冪演算法

在 上一直沒有找到有關於快速冪演算法的乙個詳細的描述和解釋,這裡,我給出快速冪演算法的完整解釋,用的是c 語言,不同語言的讀者只好換個位啦,畢竟讀 c的人較多 所謂的快速冪,實際上是快速冪取模的縮寫,簡單的說,就是快速的求乙個冪式的模 餘 在程式設計過程中,經常要去求一些大數對於某個數的餘數,為了得...

快速冪演算法

模運算 公式 a b mod n a mod n b mod n mod n a b mod n a mod n b mod n mod n a b mod n a mod n b mod n mod n 要保證n是整數 要知道a mod n和b mod n都是比n小的 利用這些共識可以有效地防止溢...