struct matrix { //5*5矩阵
long long a[6][6];
matrix() {
memset(a,0,sizeof a);
}
matrix(int a1,int a2,int a3,int a4,int a5) {
memset(a,0,sizeof a);
a[1][1]=a1;
a[1][2]=a2;
a[1][3]=a3;
a[1][4]=a4;
a[1][5]=a5;
}
matrix operator * (const matrix &b) const {//矩阵乘法
matrix c;
for(int i=1;i<=5;i++) {
for(int j=1;j<=5;j++) {
for(int k=1;k<=5;k++)
c.a[i][j]=(c.a[i][j]+a[i][k]*b.a[k][j]%Mod)%Mod;
}
}
return c;
}
};
matrix quickpow(matrix &now,long long x) {//快速幂
if(x==1) return now;
matrix ans;
for(int i=1;i<=5;i++) ans.a[i][i]=1;
while(x) {
if(x&1) ans=ans*now;
now=now*now;
x>>=1;
}
return ans;
}
矩阵快速幂模板
最新推荐文章于 2024-07-25 12:55:56 发布