水题。。矩阵快速幂
顺便看一下欧拉公式的模板。。。
//矩阵快速幂
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<vector>
using namespace std;
#define inf 9973
int mat[12][12];
/*
int euler(int x)//cout<<euler(9973)<<endl;=9972
{// 就是公式
int i, res=x;
for (i = 2; i < (int)sqrt(x * 1.0) + 1; i++)
if(x%i==0) {
res = res / i * (i - 1);
while (x % i == 0) x /= i; // 保证i一定是素数
}
if (x > 1) res = res / x * (x - 1);
return res;
}*/
void f(int n,int k)
{
int i,j,u;
int ans=0;
int tmp[12][12];
int res[12][12];
memset(res,0,sizeof(res));
memset(tmp,0,sizeof(tmp));
for(i=0;i<n;i++)
res[i][i]=1;
while(k)
{
if(k&1)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
tmp[i][j]=res[i][j];
memset(res,0,sizeof(res));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(u=0;u<n;u++)
res[i][j]=(res[i][j]+tmp[i][u]*mat[u][j])%inf;
}
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
tmp[i][j]=mat[i][j];
memset(mat,0,sizeof(mat));
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(u=0;u<n;u++)
mat[i][j]=(mat[i][j]+tmp[i][u]*tmp[u][j])%inf;
}
}
k>>=1;
}
for(i=0;i<n;i++)
{
ans+=res[i][i];
ans%=inf;
}
cout<<ans<<endl;
}
int main()
{
//freopen("q.in","r",stdin);
int cas;
int n,k,i,j;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&n,&k);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&mat[i][j]);
mat[i][j]%=inf;
}
}
f(n,k);
}
}