解题思路: 递归
注意事项:
参考代码:
#include<iostream> using namespace std; int a[2][2]; int b, m; int sum; void mul(int e[][2], int d[][2], int m) { // cout<<"调用乘法"<<endl; int c[2][2]; for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { sum=0; for(int k=0; k<2; k++) sum+=e[i][k]*d[k][j]; c[i][j]=sum % m; } } for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { a[i][j] = c[i][j]; } } return ; } void fun(int a[][2], int b, int m) { if(b == 0) { // cout<<"调用1"<<endl; for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { if(i == j) a[i][j] = 1%m; else a[i][j] = 0; } } return ; } if(b%2==1) { // cout<<"调用2"<<endl; int c[2][2]; for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { c[i][j] = a[i][j]; } } fun(a,b-1,m); mul(a,c,m); return ; } else { // cout<<"调用3"<<endl; fun(a,b/2,m); mul(a,a,m); return ; } return; } int main() { cin>>b>>m; for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { cin>>a[i][j]; } } fun(a, b, m); for(int i = 0; i < 2; i++) { for(int j = 0; j < 2; j++) { cout<<a[i][j]<<' '; } cout<<endl; } return 0; }
0.0分
1 人评分
出圈】指针malloc版浏览:377 |
sizeof的大作用 (C语言代码)浏览:1138 |
妹子杀手的故事 (C语言代码)浏览:1153 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:532 |
顺子浏览:1369 |
IP判断 (C语言代码)浏览:532 |
时间转换 (C语言代码)浏览:855 |
简单的事情 (C语言代码)浏览:589 |
WU-C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:1298 |
WU-C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:782 |