原题链接:蓝桥杯算法提高VIP-矩阵乘方
解题思路:
快速幂运算和矩阵乘法结合即可
注意事项:
任何矩阵的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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复