解题思路:
快速幂运算和矩阵乘法结合即可
注意事项:
任何矩阵的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语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:1031 |
C语言训练-计算t=1+1/2+1/3+...+1/n (C语言代码)浏览:869 |
C语言程序设计教程(第三版)课后习题9.8 (Java代码)浏览:1642 |
简单的a+b (C++语言代码)浏览:860 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:718 |
蛇行矩阵 (C语言代码)浏览:753 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:702 |
【矩阵】 (C++代码)浏览:950 |
最小公倍数 (C语言代码)浏览:1029 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:787 |