原题链接:蓝桥杯算法提高VIP-矩阵乘方
有点难理解。。。
参考代码:
#include <iostream>
#include <cstdio>
using namespace std;
const int N=2;
int m;
struct Matrix{
int m[N][N];
}matrix; //定义表示矩阵的结构体
Matrix I={1,0,
0,1}; //单位矩阵
Matrix p;
inline Matrix multiply(Matrix a,Matrix b){ //inline表示内联函数 实现矩阵乘法
int i,j,k;
Matrix re;
for(i=0;i<N;i++)
for(j=0;j<N;j++){
re.m[i][j]=0;
for(k=0;k<N;k++)
re.m[i][j]+=a.m[i][k]*b.m[k][j];
re.m[i][j]%=m;
}
return re;
}
inline Matrix quick_pow(int n){
Matrix re=p,b=I;
while(n>0){
if(n&1){ //当是奇数的时候
b=multiply(b,re);
}
n=n>>1; //向右移一位
re=multiply(re,re);
}
return b;
}
int main()
{
int b;
while(cin>>b>>m){
for(int i=0;i<2;i++)
for(int j=0;j<2;j++)
cin>>p.m[i][j];
matrix=quick_pow(b);
for(int i=0;i<2;i++){
for(int j=0;j<2;j++)
cout<<matrix.m[i][j]%m<<" "; //坑 如果m=1且输出单位矩阵就要mod成0
cout<<endl;
}
}
return 0;
}0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复