有点难理解。。。
参考代码:
#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语言训练-立方和不等式 (C语言代码)浏览:779 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:661 |
WU-输出正反三角形 (C++代码)浏览:1103 |
1197求助浏览:669 |
众数问题 (C语言代码)浏览:717 |
A+B for Input-Output Practice (I) (C语言代码)浏览:599 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1367 |
C语言程序设计教程(第三版)课后习题7.3 (C语言代码)浏览:555 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:419 |
简单的a+b (C语言代码)浏览:667 |