設A為
的矩陣,B為
的矩陣,那么稱
的矩陣C為矩陣A與B的乘積,記作
,其中矩陣C中的第
行第
列元素可以表示為:
如下所示:
當矩陣A的列數等於矩陣B的行數時,A與B可以相乘
(1) 矩陣C的行數等於矩陣A的行數,C的列數等於B的列數。
(2) 乘積C的第
行第
列的元素等於矩陣A的第
行的元素與矩陣B的第
列對應元素乘積之和。
矩陣快速冪的模板:
就是要找到一個矩陣A,滿足 F[i-1]*A=F[i]。
然后就通過矩陣的性質,計算出 F[n]=A^(n-1)*F[1]。
#define mod 10000 #define N 2 struct mat { int m[N+1][N+1]; mat() { m[1][1]=1;m[1][2]=1; m[2][1]=1;m[2][2]=0; } }; mat mul(mat a,mat b) { mat ans; int i,j,k; for(i=1;i<=N;i++) for(j=1;j<=N;j++) ans.m[i][j]=0; for(i=1;i<=N;i++) for(j=1;j<=N;j++) for(k=1;k<=N;k++) ans.m[i][j]=(ans.m[i][j]+a.m[i][k]*b.m[k][j])%mod; return ans; } int matqp(int p) { mat ans,t; int i,j; for(i=1;i<=N;i++) for(j=1;j<=N;j++) if(i==j)ans.m[i][j]=1; else ans.m[i][j]=0; while(p) { if(p&1) ans=mul(ans,t); t=mul(t,t); p=p>>1; } return ans.m[2][1];//視公式而定 }
