1、整數快速冪
例如求x^8 就是x*x*x*x*x*x*x*x
正常的運算方式是,x的值乙個個往上乘上去,乘法運算執行7次
(x x)(x x) (x x)(x x)
也可以採用這種運算方式,先進行乘法得到x^2再對x^2進行三次乘法。這種運算要明顯比第一種情況要快
所以對於整數快速冪,也是結合了這種思想
(x^m)*(x^n)=x^(m+n)
x^19=(x^16)(x^2)(x^1)
//整數快速冪
int quickpow(int x,int n)
res = res*res;
n = n>>1;
}return ans;
}
2、矩陣快速冪
struct matrix //結構體,矩陣型別
ans,res;
//計算矩陣乘法的函式,引數是矩陣a,矩陣b和乙個n,代表這兩個矩陣是幾階方陣
maxtrix mul(maxtrix a,maxtrix b,int n)
//快速冪演算法,求矩陣res的n次冪
void quickpower(int n,int n)
while(n)
}
3.示例:斐波那契數列 poj3070
f[n]=f[n-1]+f[n-2]
f[0]=0,f[1]=1;
斐波那契數列是乙個遞推式求出來的
第n+1項由第n項和第n-1項遞推而來
因此可以用矩陣表示:
#includeusing namespace std;
#define mod 10000
struct matrix
void init()
return ans;}
int main()
}return 0;
}
快速冪計算(整數快速冪 矩陣快速冪)
快速冪計算 樸素演算法實現 1 ll get pow ll x,ll n 這裡的n要求不小於0,如果n小於0則令n n,並且最終返回1.0 ans即可 29 return ans 10 快速冪演算法 原理 二分 假設我們現在要計算pow x,n 那麼有當n為偶數時pow x,n pow x x,n ...
快速冪 普通快速冪 矩陣快速冪
題意 n個人排隊,f表示女,m表示男,包含子串 fmf 和 fff 的序列為o佇列,否則為e佇列,有多少個序列為e佇列。分析 矩陣快速冪入門題。下面引用巨巨解釋 用f n 表示n個人滿足條件的結果,那麼如果最後乙個人是m的話,那麼前n 1個滿足條件即可,就是f n 1 如果最後乙個是f那麼這個還無法...
快速冪(矩陣快速冪)
求 3 0 3 1 3 n mod 1000000007 input 輸入乙個數n 0 n 10 9 output 輸出 計算結果 sample input 3sample output 40 分析 利用等比數列的求和公式得所求和是 3 n 1 1 2,如果暴力求3 n 1 會超時,這裡引入快速冪來...