【模板】矩阵加、乘、快速幂 matrix

posted on 2022-01-25 18:52:13 | under 模板 | source

typedef long long LL;
const int P=998244353;
template<int N,int M,class T=LL> struct matrix{
	T a[N+1][M+1];
	matrix(bool k=0){memset(a,0,sizeof a);for(int i=1;i<=N;i++) a[i][i]=k;}
	T* operator[](int i){return a[i];}
};
template<int N,int M,class T=LL> matrix<N,M,T> operator+(matrix<N,M,T> a,matrix<N,M,T> b){
	for(int i=1;i<=N;i++)
		for(int j=1;j<=M;j++)
			a[i][j]=(a[i][j]+b[i][j])%P;
	return a;
}
template<int N,int M,int R,class T=LL> matrix<N,R,T> operator*(matrix<N,M,T> a,matrix<M,R,T> b){
	matrix<N,R,T> r=0;
	for(int i=1;i<=N;i++)
		for(int j=1;j<=R;j++)
			for(int k=1;k<=M;k++)
				r[i][j]=(r[i][j]+a[i][k]*b[k][j])%P;
	return r;
}
template<int N,class T=LL> matrix<N,N,T> operator^(matrix<N,N,T> a,LL b){
	matrix<N,N,T> r=1;
	for(;b;b>>=1,a=a*a) if(b&1) r=r*a;
	return r;
}
posted @ 2022-11-06 19:16  caijianhong  阅读(16)  评论(0编辑  收藏  举报