二分快速冪

2021-07-31 11:37:13 字數 675 閱讀 4049

在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 = dfs(a,b/2,mod);

temp = temp * temp % mod;

if(b%2 == 1)

return temp

}

迴圈如下:

int a,b;

int mod = 100999999;

cin>>a>>b;

int temp = a;

int ans = 1; //必須為1,否則答案必為0

for(;b;b/=2)

temp = temp * temp % mod;

}cout<

1、因為數字比較大 盡可能使用  long long 型別;

2、取模運算中,若出現(9-7)%3 如果分開寫 9%3 - 7%3 則為 -1,需要加模數,-1+3 = 2;

3、二分快速冪利用了二進位制特徵 0、1來判斷。

二分快速冪

題目 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...

二分快速冪

對於a b,普通的求法是用乙個迴圈一直乘b個a,這樣的方法對於某些題目來說可能顯得比較慢。二分快速冪是一種利用b的二進位制特徵來快速求a b的演算法。例如 a 2,b 35 則b的二進位制表示形式為100011 則 a b 2 32 2 2 2 1 有了這樣的思路之後,就不用迴圈b次了。假設b的二進...

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 那麼...