矩阵相乘和快速幂基本模板
1 typedef vector<int> vec; 2 typedef vector<vec> mat; 3 4 //计算A*B 5 mat mul(mat &A, mat &B) { 6 mat C(A.size(), vec(B[0].size())); 7 for (int i = 0; i < A.size(); i++) { 8 for (int k = 0; k < B.size(); k++) { 9 for (int j = 0; j < B[0].size(); j++) { 10 C[i][j] = (C[i][j] + A[i][k] * B[k][j]) % MOD; 11 } 12 } 13 } 14 return C; 15 } 16 17 //计算A^n 18 mat mat_pow(mat A, LL n) { 19 mat B(A.size(), vec(A.size())); 20 for (int i = 0; i < A.size(); i++) { 21 B[i][i] = 1; 22 } 23 while (n > 0) { 24 if (n & 1) B = mul(B, A); 25 A = mul(A, A); 26 n >>= 1; 27 } 28 return B; 29 }
原文:https://www.cnblogs.com/romaLzhih/p/12313945.html