首页 > 其他 > 详细

【模板】【数学】矩阵快速幂

时间:2020-02-01 13:20:56      阅读:60      评论:0      收藏:0      [点我收藏+]

参考:https://blog.csdn.net/lytwy123/article/details/89854096

矩阵快速幂其实就是在原来的快速幂基础上,数字变成了矩阵而已。拿一下别人的模板hhh

技术分享图片
 1 int n; // 所有矩阵都是 n * n 的矩阵
 2 struct matrix {
 3    int a[100][100];
 4 };
 5 matrix matrix_mul(matrix A, matrix B, int mod) {
 6     // 2 个矩阵相乘
 7     matrix C;
 8     for (int i = 0; i < n; ++i) {
 9         for (int j = 0; j < n; ++j) {
10             C.a[i][j] = 0;
11             for (int k = 0; k < n; ++k) {
12                 C.a[i][j] = (C.a[i][j] + A.a[i][k] * B.a[k][j] % mod) % mod;
13             }
14         }
15     }
16     return C;
17 }
18 matrix unit() {
19     // 返回一个单位矩阵
20     matrix res;
21     for (int i = 0; i < n; ++i) {
22         for (int j = 0; j < n; ++j) {
23             if (i == j) {
24                 res.a[i][j] = 1;
25             } else {
26                 res.a[i][j] = 0;
27             }
28         }
29     }
30     return res;
31 }
32 matrix matrix_pow(matrix A, int n, int mod) {
33     // 快速求矩阵 A 的 n 次方
34     matrix res = unit(), temp = A;
35     for (; n; n /= 2) {
36         if (n & 1) {
37             res = matrix_mul(res, temp, mod);
38         }
39         temp = matrix_mul(temp, temp, mod);
40     }
41     return res;
42 }
View Code

 

【模板】【数学】矩阵快速幂

原文:https://www.cnblogs.com/xiaobuxie/p/12248074.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!