#include <stdio.h>
#include <string.h>
#define M 9973
#define N 10
#define MAX 30
int n;
int sz[N][N];
void init(int a[N][N])
{
int i,j;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
a[i][j]=0;
if (i==j) a[i][j]=1;
}
}
}
void Copy(int org[N][N],int cpy[N][N])
{
memcpy(cpy,org,sizeof(sz));
}
void Mul(int a[N][N],int b[N][N],int c[N][N])
{
int tc[N][N]={0};
int i,j,k;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
tc[i][j]+=a[i][k] * b[k][j];
tc[i][j]%=M;
}
}
}
Copy(tc,c);
}
int main ()
{
int T,k,i,j;
int b[MAX][N][N];
int sum[N][N],ans;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
scanf("%d",&b[0][i][j]);
}
}
for (i=0;i<MAX-1;i++)
{
Mul(b[i],b[i],b[i+1]);
}
i=MAX-1;
init(sum);
while(k)
{
if (k>=(1<<i))
{
Mul(sum,b[i],sum);
k-=(1<<i);
}
i--;
}
ans=0;
for (i=0;i<n;i++) ans+=sum[i][i];
printf("%d\n",ans%M);
}
}
1575 矩阵乘法
最新推荐文章于 2022-02-25 19:38:17 发布