1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| struct Matrix{ int n, m; vector<vector<int>>a; Matrix(int n, int m) : n(n), m(m), a(n, vector<int>(m)) {}
Matrix operator* (const Matrix &o){ Matrix c(n, o.m); for(int i = 0; i < n; i++){ for(int j = 0; j < o.m; j++){ for(int k = 0; k < m; k++){ c.a[i][j] += a[i][k] * o.a[k][j]; c.a[i][j] %= mod; } } } return c; } };
Matrix Mqmi(Matrix M, int k){ Matrix res(M.n, M.n); for(int i = 0; i < M.n; i++) res.a[i][i] = 1; while(k){ if(k & 1) res = res * M; M = M * M; k >>= 1; } return res; }
|