矩阵快速幂--最基础的算法,最详细的注释

整理知识啦

矩阵运算是数学和工程上很常用的方法

计算又是比较耗时的,所以能快一点是一点吧

那矩阵快速幂一般用来干什么呢

emmm 递推变换的时候吧(大概

比如有人问你第五百六十万七千八百三十二个斐波那契数是多少

如果直接递推的话你的计算机小伙伴一时半会儿可能也不知道

但如果用矩阵快速幂也就循环个十几二十次,快到没什么感觉

至于为什么矩阵自乘能算递推,请看线性代数,当然这种递推仅限a+b+c这种

矩阵快速幂的原理就和普通快速幂一样,单个项变成了矩阵而已

上代码

#include
#define N 32   //矩阵大小
struct co{
	int u[N][N];//可添加信息 
};
struct co quit,part; //传递信息 part输入 quit输出
int matrix_power(int n,int x,int y); //n为阶数 x为指数 y为取余数
int main(){
	//设置初始矩阵和阶数啥的
	return 0; 
} 
int matrix_power(int n,int x,int y){
	struct co a,b,c,d; //倒换操作
	int i,j,k,t;
	for(i=0;i>=1){ //利用二进制 快速幂
	 if(x&1){ //个位为1 矩阵相乘
    for(k=0;ky) b.u[i][j]=c.u[i][j]%y;
		else b.u[i][j]=c.u[i][j];
		c.u[i][j]=0;
	}  
	 } 
	for(k=0;ky) d.u[i][j]=a.u[i][j]%y;
	else d.u[i][j]=a.u[i][j];
	a.u[i][j]=0; 
	} 	
	 }
	 for(i=0;i

你可能感兴趣的:(矩阵快速幂--最基础的算法,最详细的注释)