结构体
struct matrix{
int a[maxn][maxn];
}m1,m2;
int n,k;
矩阵乘法
matrix mul(matrix m1,matrix m2)
{
matrix result;
memset(result.a,0,sizeof(result.a));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
result.a[i][j]+=m1.a[i][k]*m2.a[k][j];
result.a[i][j]%=9973;
}
}
}
return result;
}
矩阵加法
matrix add(matrix m1,matrix m2)
{
matrix result;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
result.a[i][j]=m1.a[i][j]+m2.a[i][j];
result.a[i][j]%=9973;
}
}
return result;
}
矩阵快速幂
matrix mpow(matrix m1,int k)
{
if(k==1) return m1;
matrix result=mpow(m1,k/2);
result=mul(result,result);
if(k%2!=0) result=mul(result,m1);
return result;
}