矩阵乘法/矩阵快速幂模板

用于求 矩阵A^k 的问题(其中A为n行n列的矩阵)
1.快速求解fibonacci第n项
(n>3时,[f[n],f[n-1]]=[f[2],f[1]]*A
其中矩阵A.c[1][1]=A.c[1][2]=A.c[2][1]=1,A.c[2][2]=0)

matrix结构体

int n;
struct matrix{
	ll c[101][101];
	matrix(){
		memset(c,0,sizeof(c));
	}
};

矩阵乘法运算符重载

(其中令X[i*k] * Y[k*j])(x,y都是n x n矩阵)

matrix operator*(matrix&x,matrix&y){
	matrix t;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				t.c[i][j]=(t.c[i][j]+x.c[i][k]*y.c[k][j])%mod;//注意在这里对数字进行取模
			}
		}
	}
	return t;
}

矩阵快速幂方法

matrix quickpow(matrix A,ll k){
	matrix res;
	for(int i=1;i<=n;i++)res.c[i][i]=1;//单位矩阵
	while(k){
		if(k&1)res=res*A;
		A=A*A;
		k>>=1;
	}
	return res;
}
posted @   Marinaco  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示