二分快速冪

2022-08-31 10:33:10 字數 512 閱讀 8026

對於a^b,普通的求法是用乙個迴圈一直乘b個a,這樣的方法對於某些題目來說可能顯得比較慢。

二分快速冪是一種利用b的二進位制特徵來快速求a^b的演算法。

例如:a = 2, b = 35

則b的二進位制表示形式為100011

則 a^b = (2^32) * (2^2) * (2^1)

有了這樣的思路之後,就不用迴圈b次了。

假設b的二進位制表示有n位,從後往前依次為第1-n位,初始結果為1。則現在只需要從最後一位開始,若該位為0,則略過,若該位為1,則結果乘上a^(2^當前位序號)。最後得到的結果就是a^b了。這樣迴圈執行的次數僅為b的二進位制表示的位數,遠小於b。

1

long

long bigpow(int x, inty)2

11return

ret;

12 }

上述**中的函式輸入引數為兩個整型值x和y,返回x^y的值。應當注意的是返回值及臨時變數應當設定為範圍足夠大的數字型別,否則會發生溢位。

二分快速冪

在a,b為整數時,若 b很大,如 b 10 25 的時候,我們就要進行優化。如果b是偶數,則可以看作 a b a b 2 2 如果b是奇數,則 a b a b 1 2 2。則有兩種方法,一種遞迴 dfs 一種迴圈,遞迴如下 int dfs int a,int b,int mod int temp d...

二分快速冪

題目 ac include includeusing namespace std long long pow long long a,long long b,long long mod 二分快速冪 int main long long n,m cin n m long long mod 100000...

binaryPow 快速冪 二分冪

快速冪,二分冪 求a b m a 10 9,b 10 6,m 10 9 兩個整數可能不超過int型範圍,但是相乘之後可能就超過了範圍 ll llpow ll a,ll b,ll m else 遞推版 每乙個十進位制的數都唯一存在乙個與之對應的二進位制01串 如 13 1101 13 8 4 1 那麼...