设A为 的矩阵,B为
的矩阵,那么称
的矩阵C为矩阵A与B的乘积,记作
,其中矩阵C中的第
行第
列元素可以表示为:
![](https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D334/sign=5e0cfe86de33c895a27e9e78e5137397/8ad4b31c8701a18bd6fe9b5e992f07082838fe8e.jpg)
如下所示:
![](https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D594/sign=01474d246759252da7171d0d009a032c/adaf2edda3cc7cd955ae9be73e01213fb80e9109.jpg)
当矩阵A的列数等于矩阵B的行数时,A与B可以相乘
(1) 矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
(2) 乘积C的第
行第
列的元素等于矩阵A的第
行的元素与矩阵B的第
列对应元素乘积之和。
![](https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D12/sign=00bd64853fdbb6fd215be12408244fe6/4e4a20a4462309f7c1357d6c740e0cf3d7cad672.jpg)
![](https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D17/sign=149b674c5cafa40f38c6cadaaa6459ed/d62a6059252dd42a4f5fd1d5053b5bb5c9eab87e.jpg)
![](https://gss1.bdstatic.com/9vo3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D12/sign=00bd64853fdbb6fd215be12408244fe6/4e4a20a4462309f7c1357d6c740e0cf3d7cad672.jpg)
![](https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/s%3D17/sign=149b674c5cafa40f38c6cadaaa6459ed/d62a6059252dd42a4f5fd1d5053b5bb5c9eab87e.jpg)
矩阵快速幂的模板:
就是要找到一个矩阵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];//视公式而定 }