題目:
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=1000000007;
long long all=pow(m,n,mod);
long long diff=(m%mod*pow(m-1,n,mod))%mod;
long long ans=all-diff; //全部方案數減去沒有氣球消消樂的方案數(排列組合思想)
if(ans<0) ans+=mod;
cout就是模板題。
二分快速冪對於大資料求冪 很有效率。必須記住。
然後測試遇到的問題就是出現了負數,發現如果all取餘後比diff取餘後的值小的話就會這樣,所以應該判斷一下,加個mod。
二分快速冪
在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...
二分快速冪
對於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 那麼...