矩陣快速冪優化遞推式 例 斐波那契數列

2021-08-19 07:23:34 字數 1306 閱讀 1115

第一行第一列元素為第乙個矩陣的第一行的每個元素和第二個矩陣的第一列的每個元素乘積的和 以此類推 第i行第j列的元素就是第乙個矩陣的第i行的每個元素與第二個矩陣第j列的每個元素的乘積的和。

② 單位矩陣: n*n的矩陣 mat ( i , i )=1; 任何乙個矩陣乘以單位矩陣就是它本身 n*單位矩陣=n, 可以把單位矩陣等價為整數1。(單位矩陣用在矩陣快速冪中)

例如下圖就是乙個7*7的單位矩陣:

矩陣及其乘法的實現:

見對於矩陣乘法與遞推式之間的關係:

如:在斐波那契數列之中

fi[i] = 1*fi[i-1]+1*fi[i-2] fi[i-1] = 1*f[i-1] + 0*f[i-2];

所以

矩陣快速冪:

因為矩陣乘法滿足結合律,原因如下

所以,我們可以用類似數字快速冪的演算法來解決矩陣快速冪。(前提:矩陣為n*n的矩陣,原因見矩陣乘法定義)

**[cpp]view plain

copy

matrix fast_pow(matrix a, 

intx)   

return

ans;  

}  用矩陣快速冪求斐波那契數列的第n項的**:

[cpp]view plain

copy

#include

#include

#include

#include

using

namespace

std;  

const

intm = 1e9+7;  

struct

matrix   

matrix operator * (const

matrix y)   

void

operator = (

const

matrix b)   

};  

intsolve(

long

long

x)   

return

ans.a[0][0];  

}  int

main()   

斐波那契(矩陣快速冪)

斐波那契數列,即fib n fib n 1 fib n 2 fib n fib n 1 fib n 2 fib n fib n 1 fi b n 2 就這麼乙個數列,顯然可以直接遞推求解,時間複雜度o n o n o n 似乎沒什麼問題。然後就遇到了這個,n nn的取值範圍最大是2 1 09 2 t...

矩陣快速冪 斐波那契數列

time limit 1000 ms memory limit 128 mb 通過小l的不懈努力,他即將成為大神啦,他登上了大神專屬的頒獎臺。在頒獎台上,他即將領取代表著大神的無限榮譽的勳章。小l走上頒獎台後,在台上發現了乙個製作精美的盒子。榮譽勳章就在盒子裡面。小l發現這個盒子被上了鎖,在這個盒子...

矩陣快速冪 斐波那契數列

先來實現乙個矩陣相乘的函式吧。const int mod 10000 struct mat mat mat mul mat x,mat y 實現兩個矩陣相乘,返回的還是乙個矩陣。return res 其實和普通快速冪類似,只不過這裡需要得到的是乙個矩陣下面來實現乙個矩陣快速冪 int pow int...