解题思路:
快速幂运算和矩阵乘法结合即可
注意事项:
任何矩阵的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分
1 人评分
C二级辅导-进制转换 (C语言代码)浏览:615 |
C语言训练-尼科彻斯定理 (C语言代码)浏览:464 |
printf基础练习2 (C语言代码)浏览:617 |
【偶数求和】 (C语言代码)浏览:431 |
1048题解(读入回车问题)浏览:555 |
C二级辅导-等差数列 (C语言代码)浏览:695 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:542 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:512 |
孤独的骑士 (C语言代码)浏览:1364 |
简单的a+b (C语言代码)浏览:449 |