矩阵快速幂,套用标准模板即可。
#include <cstdio>
#include <cstring>
using namespace std;
const int mod = 9973;
const int MAXN = 15;
int n, k;
struct Matrix //矩阵
{
int arr[MAXN][MAXN];
}m;
//矩阵乘法,计算a*b,同时对mod取余
Matrix Mul(Matrix a, Matrix b)
{
Matrix c;
memset(c.arr, 0, sizeof(c.arr));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < n; k++)
c.arr[i][j] = (c.arr[i][j] + a.arr[i][k] * b.arr[k][j] % mod) % mod;
}
}
return c;
}
//矩阵快速幂,计算a^x
Matrix Pow(Matrix a, int x)
{
Matrix res;
memset(res.arr, 0, sizeof(res.arr));
for (int i = 0; i < n; i++)
{
res.arr[i][i] = 1;
}
while (x)
{
if (x & 1)
res = Mul(res, a);
x >>= 1;
a = Mul(a, a);
}
return res;
}
int main()
{
int T;
scanf("%d", &T);
while (T--)
{
scanf("%d%d", &n, &k);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
scanf("%d", &m.arr[i][j]);
}
Matrix res = Pow(m, k);
int ans = 0;
for (int i = 0; i < n; i++)
ans = (ans + res.arr[i][i]) % mod;
printf("%d\n", ans);
}
return 0;
}
继续加油。