【模板】矩阵快速幂

矩阵快速幂与正常的整数快速幂完全一致,只不过重定义了一下乘号罢了。

但注意此代码下的ans应初始化为矩阵乘法的幺元——即单位矩阵。

联动#F.Tr A

#include<bits/stdc++.h>
using namespace std;
int n, moyn = 9973, t, s;
struct matrix{
	long long mat[10][10];
	matrix() {memset(mat,0,sizeof(mat));}
	matrix operator *(const matrix& T) const {
		matrix res;
		int tmp;
		for(int i = 0;i < 10;++i) {
			for(int k = 0;k < 10;++k) {
				tmp = mat[i][k];
				for(int j = 0;j < 10;++j) {
					res.mat[i][j] += tmp*T.mat[k][j];
					res.mat[i][j] %= moyn;
				}
			}
		}
		return res;
	}
} ans, base;
void init() {
	memset(ans.mat,0,sizeof(ans.mat));
	for(int i = 0;i < 10;++i)
		ans.mat[i][i] = 1;
	memset(base.mat,0,sizeof(base.mat));
	return;
}
void quickpow(int x) {
	while(x) {
		if(x&1) ans = ans*base;
		base = base*base;
		x >>= 1;
	}
	return;
}
int main() {
	scanf("%d",&t);
	for(int i = 1;i <= t;++i) {
		scanf("%d %d",&n,&s);
		init();
		for(int j = 0;j < n;++j)
			for(int k = 0;k < n;++k) 
				scanf("%lld",&base.mat[j][k]);
		quickpow(s);
		int res = 0;
		for(int i = 0;i < 10;++i) {
			res += ans.mat[i][i];
			res %= moyn;
		}
		printf("%d\n",res);
	}
	return 0;
}

 

上一篇:halcon-invert_matrix返回逆矩阵


下一篇:halcon-norm_matrix求矩阵的范数