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