思路:
1.重载矩阵运算符,定义矩阵乘法或者重载矩阵
2.按照快速幂的思想,循环计算或者递归计算
注意点:表示结果的矩阵要定义为单位矩阵
不使用重载:
#include #include #include #include #include #include #include using namespace std; #define LL long long #define N 105 #define Md 1000000007 LL n, m, i, j, k; LL res[N][N]; LL tmp[N][N]; LL s[N][N]; void clear(LL a[][N]) { for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { a[i][j] = 0; } } } void ResMul(LL a[][N], LL b[][N]) { clear(tmp); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { for (k = 0; k < n; k++) { //printf("a[i][k]=%lld b[k][i]=%lldn", a[i][k], b[k][i]); tmp[i][j] += a[i][k] * b[k][j] % Md; tmp[i][j] %= Md; } } } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { res[i][j] = tmp[i][j]; } } } void AMul(LL a[][N], LL b[][N]) { clear(tmp); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { for (k = 0; k < n; k++) { tmp[i][j] += a[i][k] * b[k][j] % Md; tmp[i][j] %= Md; } } } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { s[i][j] = tmp[i][j]; } } } int main() { cin >> n >> m; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { cin >> s[i][j]; } } for (i = 0; i < n; i++) { res[i][i] = 1;//单位矩阵 } while (m)//快速幂 { if (m & 1) { ResMul(res,s); } AMul(s, s); m >>= 1; } for (i = 0; i < n; i++)//输出结果 { for (j = 0; j < n; j++) { cout << res[i][j] << ' '; } cout << endl; } return 0; }
重载:
学习中,学习链接:C++-重载运算符-矩阵(示例代码)_136.la
上一篇 第二章:数据类型、运算符和表达式
下一篇 程序设计与C语言第一章总结
版权所有 (c)2021-2022 MSHXW.COM
ICP备案号:晋ICP备2021003244-6号