给定一个m*m的矩阵A,求它的n次幂A^n
首先需要定义一个矩阵的结构体,注意矩阵的相乘也需要取模
const int maxn=100;//矩阵大小
const int mod=1e4;//取模
struct Matrix{
int m[maxn][maxn];
Matrix(){
memset(m,0,sizeof(m));
}
};
Matrix Multi(Matrix a,Matrix b){//矩阵相乘
Matrix res;
for(int i=0;i<maxn;i++){
for(int j=0;j<maxn;j++){
for(int k=0;k<maxn;k++){
res.m[i][j]=(res.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
}
}
}
return res;
}
Matrix fastm(Matrix a,int n){//快速幂
Matrix res;
for(int i=0;i<maxn;i++){//初始化单位矩阵
res.m[i][i]=1;
}
while(n){
if(n&1)res=Multi(res,a);
a=Multi(a,a);
n>>1;
}
return res;
}
矩阵快速幂的复杂度O(m^3log(2,n))
应用矩阵的难点就是如何将递推关系转换成矩阵