先写一个矩阵乘法,然后应用快速幂即可
#include <iostream>
using namespace std;
typedef long long ll;
ll arr[11][11],n;
void quick_multipy(ll a[][11],int p)
{
ll nres[11][11]={0};
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
nres[i][j]=(nres[i][j]+(a[i][k]*arr[k][j])%p)%p;
}
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
a[i][j]=nres[i][j];
}
ll quick_pow(int b,int p)
{
ll res[11][11]={0ll},ans=0ll;
for(int i=0;i<n;i++) {res[i][i]=1ll;
for(int j=0;j<n;j++)
arr[i][j]%=p;
}
while(b)
{
if(b&1) quick_multipy(res,p);
b>>=1;
quick_multipy(arr,p);
}
for(int i=0;i<n;i++) ans=(ans+res[i][i])%p;
return ans;
}
int main(int argc, char const *argv[])
{
int T,k;
cin>>T;
while(T--)
{
cin>>n>>k;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>arr[i][j];
cout<<quick_pow(k,9973)<<endl;
}
return 0;
}