矩阵快速幂


前言

相对于一般的快速幂,矩阵快速幂仅仅是把他的底数和乘数换成了矩阵形式,而相应的乘法运算什么的也遵循矩阵的运算法则。矩阵快速幂主要是用于求一个很复杂的递推式的某一项问题。


一、构造矩阵

struct matrix {
	int mat[15][15];//定义矩阵 
}x,y;
matrix mul(matrix x,matrix y){//矩阵乘法 
	matrix tmp;
	for(int i=0;i<len;i++){
		for(int j=0;j<len;j++){
			tmp.mat [i][j]=0;
			for(int k=0;k<len;k++){
				tmp.mat [i][j]+=(x.mat [i][k]*y.mat [k][j])%mod;
			}
			tmp.mat [i][j]=tmp.mat[i][j]%mod;
		}
	}
	return tmp;
}

二、矩阵快速幂

matrix matpow(matrix x,matrix y,int num){//矩阵快速幂 
	while(num){
		if(num&1){
			y=mul(y,x);
		}
		x=mul(x,x);
		num=num>>1;
	}
	return y;
}

矩阵快速幂递推公式

矩阵快速幂的难点在关系矩阵的构造上,而构造关系矩阵也就两个基本套路,要么是递推式、要么是线性变化

下面列举常见的递推公式

斐波那契数列

F i F_i Fi= F i − 1 F_{i-1} Fi1+ F i − 2 F_{i-2} Fi2
斐波那契数列

递推公式-1

G i G_i Gi=a* G i − 1 G_{i-1} Gi1+b* G i − 2 G_{i-2} Gi2
递推公式-1

递推公式-2

G i G_i Gi=a* G i − 1 G_{i-1} Gi1+ i 2 i^2 i2
递推公式-2


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值