2 2 2 1 0 0 1 3 99999999 1 2 3 4 5 6 7 8 9
2 2686
分析:跟快速幂差不多,就是一个是数,一个是矩阵
代码:
#include <stdio.h>
#include <string.h>
#define mod 9973
struct node{
int map[15][15];
};
node a, b;
int n;
node mul(node a, node b){
node c;
int i, j, k;
for(i = 0; i < n; i ++)
for(j = 0; j < n; j ++){
c.map[i][j] = 0;
for(k = 0; k < n; k ++)
c.map[i][j] += a.map[i][k]*b.map[k][j];
c.map[i][j] %= mod;
}
return c;
}
node f(int k, node a){
b = a; k-=1; //将
while(k){
if(k&1) b = mul(b, a);
k>>=1;
a = mul(a, a);
}
return b;
}
int main(){
int t, k;
scanf("%d", &t);
while(t --){
scanf("%d%d", &n, &k);
int i, j;
for(i = 0; i < n; i ++){
for(j = 0; j < n; j ++){
scanf("%d", &a.map[i][j]);
}
}
node ans = f(k, a);
int res = 0;
for(i = 0; i < n; i ++) res += ans.map[i][i];
printf("%d\n", res%mod);
}
return 0;
}
原文:http://blog.csdn.net/shengweisong/article/details/41482673