解题思路:

快速幂运算和矩阵乘法结合即可

注意事项:

任何矩阵的0次方等于单位矩阵


参考代码:

#include<iostream>
#include<algorithm>
using namespace std;
const int MAX=2;
typedef struct 
{
	int m[MAX][MAX];
}Matrix;

Matrix I=
{
	1,0,
	0,1,
};
Matrix ZERO=
{
	0,0,
	0,0,
};
Matrix matrixmul(Matrix a,Matrix b,int m)//矩阵乘法
{
	Matrix c;
	for(int i=0;i<MAX;i++)
	{
		for(int j=0;j<MAX;j++)
		{
			c.m[i][j]=0;
			for(int k=0;k<MAX;k++)
			{
				c.m[i][j]+=(a.m[i][k]*b.m[k][j])%m;
			}
			c.m[i][j]%=m;
		}	
	} 
	return c;
} 
Matrix quickpow(Matrix p,long long n,int m)
{
	Matrix ans = I;
	while(n>0)
	{
		if(n&1) ans = matrixmul(ans,p,m);
		n=n>>1;
		p=matrixmul(p,p,m);
	}
	return ans;
}
void print(Matrix p)
{
	cout<<p.m[0][0]<<" "<<p.m[0][1]<<endl;
	cout<<p.m[1][0]<<" "<<p.m[1][1]<<endl; 
}
int main(void)
{
	int b,m;
	Matrix p;
	cin>>b>>m;
	if(b!=0)
	{
		cin>>p.m[0][0]>>p.m[0][1]>>p.m[1][0]>>p.m[1][1];
		p = quickpow(p,b,m);
		print(p); 
	}
	else if(b==0 && m!=1) 
	{
		print(I);
	}
	else 
	{
		print(ZERO);
	}
	return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论