快速冪與矩陣快速冪

2021-08-27 05:46:05 字數 924 閱讀 8877

**:

【快速冪】o(logn)時間複雜度

#include#includeusing namespace std;

int qpow(int base, int n)

return ans;

}int main()

【矩陣快速冪】該演算法只適用於方陣

設 a 為方陣 , 快速求 a n 的演算法

【應用】求遞推式的第n項,例如

斐波那契 遞推公式 f(n) = f(n-1)  + f(n-2)

可以轉換成以下矩陣運算:

由上述遞推式我們可以求出矩陣

因此原本求 f(1000) 需要遞推1000次,時間複雜度為o(n)

用矩陣快速冪,求f(1000, 999) = f(2, 1) * a1000   設方陣階數為m,矩陣相乘相乘時間複雜度為 o(m3),矩陣快速冪為o(logn)

則計算8*log21000  < 1000 

【模板】

/*

矩陣快速冪模板

by chsobin

*/#include#include#includeusing namespace std;

const int maxn = 2;

const int mod = 10000;

//矩陣結構體

struct matrix{

int a[maxn][maxn];

void init(){ //初始化為單位矩陣

memset(a, 0, sizeof(a));

for(int i=0;i【例題】

hdu 1575 模板題 

**:

快速冪與矩陣快速冪

1 結論 a b mod c a mod c b mod c mod c a b c a c b c 2 先這樣理解一下 int ans 1 a a c if b 2 1 ans ans a c k a a c for i 0 i return ans c 我們把式子轉化成k b 2 modc 所以...

快速冪與矩陣快速冪

快速冪,顧名思義要快速解決數冪問題 樸素演算法中時間複雜度為o n 在處理大數冪時顯然會爆,這時要使用到快速冪的思想。對於乙個數的6方a 6們通常使用a a a a a a,此時計算機進行5乘法運算,但我們可以將其拆分為 a a a a a a 這樣做的優點在於當我們進行一次a a運算後,只需將其乘...

快速冪與矩陣快速冪

如果當前的指數是偶數,我們把指數拆成兩半,得到兩個相同的數,然後把這兩個相同的數相乘,可以得到原來的數 如果當前的指數是奇數,我們把指數拆成兩半,得到兩個相同的數,此時還剩餘乙個底數,把這兩個相同的數和剩餘的底數這三個數相乘,可以得到原來的數。求解x 的值 int quickpow int x,in...