当矩阵A是n*m,矩阵B是m*p,可以运算

代码
for(int i=0;i<n;i++)
    for(int j=0;j<p;k++)
        for(int k=0;k<m;j++)
        c[i][j]+=a[i][k]*b[k][j];例题 就斐波那契数列第n项模10000的结果(n<=2*10^9)
构造矩阵式
现在,我们有A=(f[x−1],f[x−2]) B=(f[x],f[x−1])
 我们就构造一个矩阵T使得
A×T=B
如何构造?
- f[x−1]对f[x]的贡献为f[x−1]∗1,所以T1,1=1
- f[x−2]对f[x]的贡献为f[x−2]∗1,所以T1,2=1
- f[x−1]对f[x−1]的贡献为f[x−1]∗1,所以T2,1=1
- f[x−2]对f[x−1]的贡献为f[x−2]∗0,所以T2,2=0
这个矩阵S就是—
[1][1]
[1][0]
(f[n],f[n-1])=(f[1],f[0])*S^n-1
S^n-1??? 快速幂啊
矩阵的快速幂怎么写呢
void pow(int k) {
    while (k) {
        if (k&1) mul(a,b,b);
        k>>=1;
        mul(a,a,a);
    }
}自定义的mul呢
void mul(int a[2][2],int b[2][2],int ans[2][2]) {
    int t[2][2];
    for (int i=0;i<2;i++)
        for (int j=0;j<2;j++) {
            t[i][j]=0;
            for (int k=0;k<2;k++) t[i][j]=(t[i][j]+a[i][k]*b[k][j])%10000;
        }
    for (int i=0;i<2;i++)
        for (int j=0;j<2;j++) ans[i][j]=t[i][j];
}
                










