模板——矩阵快速幂+矩阵乘法

Posted |斗蜂|

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板——矩阵快速幂+矩阵乘法相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;
const long long P=1e9+7;
long long n,m;
struct nob{
	long long juzhen[105][105];
	friend nob operator * (const nob &a,const nob &b){
		nob c;
		for (int i=1; i<=n; i++){
			for (int l=1; l<=n; l++){
				long long sum=0;
				for (int k=1; k<=n; k++){
					sum+=a.juzhen[i][k]*b.juzhen[k][l];
					sum%=P;
				}
				c.juzhen[i][l]=sum;
			}
		}
		return c;
	}
}s[100];
nob resite(){
	nob a;
	for (int i=1; i<=n; i++){
		for (int l=1; l<=n; l++){
			if (i==l) a.juzhen[i][l]=1;
			else a.juzhen[i][l]=0;
		}
	}
	return a;
}
nob fastpow(nob x,long long k){
	nob ans=resite();
	while (k){
		if (k&1) ans=x*ans;
		x=x*x;
		k>>=1;
	}
	return ans;
}
int main(){
	cin>>n>>m;
	for (int i=1; i<=n; i++){
		for (int l=1; l<=n; l++){
			cin>>s[1].juzhen[i][l];
		}
	}
	s[2]=fastpow(s[1],m);
	for (int i=1; i<=n; i++){
		for (int l=1; l<=n; l++){
			cout<<s[2].juzhen[i][l]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

感觉是一个极其丑陋而且比较慢的(应该吧,因为看起来比较慢)矩乘。QAQ

以上是关于模板——矩阵快速幂+矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章

Luogu P3390 模板矩阵快速幂&&P1939 模板矩阵加速(数列)

模板矩阵乘法快速幂

模板矩阵快速幂

矩阵快速幂模板

矩阵乘法快速幂 cojs 1717. 数学序列

矩阵快速幂模板