矩阵快速幂 win7安装教程 • 2022-11-13 • 随笔 • 阅读 12 矩阵快速幂 思路: 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 欢迎分享,转载请注明来源:内存溢出原文地址: http://outofmemory.cn/zaji/4949381.html 矩阵 重载 递归 定义 单位 赞 (0) 打赏 微信扫一扫 支付宝扫一扫 win7安装教程 一级用户组 0 0 生成海报 C语言变长参数函数原理 上一篇 2022-11-13 C++依赖倒置原则 下一篇 2022-11-13 发表评论 请登录后评论... 登录后才能评论 提交 评论列表(0条)
评论列表(0条)