#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
using namespace std;
const int MAX=101;
int n;
class Matrix
{
public:
int mat[MAX][MAX];
Matrix()
{
memset(mat,0,sizeof(mat));
}
friend Matrix operator*(Matrix &a ,Matrix &b)
{
Matrix c;
memset(c.mat,0,sizeof(c.mat));
int i,j,k;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
for(k=1;k<=n;k++)
{
c.mat[i][j]+=a.mat[i][k]*b.mat[k][j];
c.mat[i][j]%=9973;
}
}
}
return c;
}
};
Matrix A,B;
Matrix Matrix_quick_power(Matrix a,int k)
{
int i;
Matrix b;
for(i=1;i<=n;i++)
b.mat[i][i]=1;
while(k)
{
if(k&1)
{
b=a*b;
k-=1;
}
else
{
a=a*a;
k>>=1;
}
}
return b;
}
int main()
{
int i,j,sum,k,t;
scanf("%d",&t);
while(t--)
{
cin>>n>>k;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&A.mat[i][j]);
A.mat[i][j]%=9973;
}
}
B=Matrix_quick_power(A,k);
sum=0;
for(i=1;i<=n;i++)
{
sum+=B.mat[i][i];
sum%=9973;
}
printf("%d\n",sum);;
}
return 0;
}
hdu-1575矩阵快速幂
最新推荐文章于 2018-04-15 19:38:37 发布