矩阵乘法/矩阵快速幂模板
用于求 矩阵A^k 的问题(其中A为n行n列的矩阵)
1.快速求解fibonacci第n项
(n>3时,[f[n],f[n-1]]=[f[2],f[1]]*A
其中矩阵A.c[1][1]=A.c[1][2]=A.c[2][1]=1,A.c[2][2]=0)
matrix结构体
int n;
struct matrix{
ll c[101][101];
matrix(){
memset(c,0,sizeof(c));
}
};
矩阵乘法运算符重载
(其中令X[i*k] * Y[k*j])(x,y都是n x n矩阵)
matrix operator*(matrix&x,matrix&y){
matrix t;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
t.c[i][j]=(t.c[i][j]+x.c[i][k]*y.c[k][j])%mod;//注意在这里对数字进行取模
}
}
}
return t;
}
矩阵快速幂方法
matrix quickpow(matrix A,ll k){
matrix res;
for(int i=1;i<=n;i++)res.c[i][i]=1;//单位矩阵
while(k){
if(k&1)res=res*A;
A=A*A;
k>>=1;
}
return res;
}

浙公网安备 33010602011771号