1 //矩阵间的乘法%m
2 Matrix matrix_mul(Matrix A, Matrix B, long long m)
3 {
4 Matrix ans;
5
6 for (int i = 0; i < N; i++)
7 {
8 for (int j = 0; j < N; j++)
9 {
10 ans.v[i][j] = 0;
11 for (int k = 0; k < N; k++)
12 {
13 ans.v[i][j] += (A.v[i][k] * B.v[k][j]) % m;
14 }
15 ans.v[i][j] %= m;
16 }
17 }
18 return ans;
19 }
20
21 //矩阵快速幂c^n%m
22 Matrix matrix_pow(Matrix C, long long n, long long m)
23 {
24 Matrix ans = { 1, 0, 0, 1 };//e
25 while (n)
26 {
27 if (n & 1)
28 ans = matrix_mul(ans, C, m);
29 C = matrix_mul(C, C, m);
30 n >>= 1;
31 }
32 return ans;
33 }