专栏文章

【模板】矩阵快速幂

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip7pjry
此快照首次捕获于
2025/12/03 07:31
3 个月前
此快照最后确认于
2025/12/03 07:31
3 个月前
查看原文

矩阵快速幂

CPP
#include <bits/stdc++.h>
using namespace std;
const int P=1e9+7; 
struct Matrix{
	int R,C;
	vector<vector<long long>> a;
	Matrix()
	{
		R=C=0;
	}
	Matrix(int r,int c)
	{
		R=r,C=c;
		a=vector<vector<long long>>(r,vector<long long>(c));
	}
	Matrix(vector<vector<long long>> v)
	{
		R=v.size();
		C=v[0].size();
		a=v; 
	}
	void print()
	{
		for(auto v:a)
		{
			for(auto x:v)
			{
				cout <<(x+P)%P<<" ";
			}
			cout <<'\n';
		}
	}
};
Matrix operator * (const Matrix &A,const Matrix &B)
{
	Matrix D(A.R , B.C);
	for(int i=0;i<D.R;i++)
	{
		for(int j=0;j<D.C;j++)
		{
			for(int k=0;k<B.R;k++)
			{
				D.a[i][j]=(D.a[i][j] + A.a[i][k] * B.a[k][j])%P;
			}
		}
	}
	return D;
}
Matrix operator ^ (const Matrix &A,long long n)
{
	Matrix X=A;
	Matrix ans(A.R,A.C);
	for(int i=0;i<A.R;i++) ans.a[i][i]=1;
	while(n)
	{
		if(n&1) ans=ans*X;
		X=X*X;
		n>>=1; 
	}
	return ans;
}
int main()
{
	
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...