Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. typedef vector<vector<ll>> matrix;
  2. matrix matrixProduct(matrix a, matrix b) {
  3.     if (!a.size() || !b.size()) return {};
  4.     if (a[0].size() != b.size()) return {};
  5.     ll n = a.size();
  6.     ll m = b[0].size();
  7.     matrix res(n, vector<ll>(m, 0));
  8.     for (int i = 0; i < n; i++) {
  9.         for (int j = 0; j < m; j++) {
  10.             for (int k = 0; k < a[0].size(); k++) {
  11.                 res[i][j] += a[i][k] * b[k][j];
  12.                 res[i][j] %= mod;
  13.             }
  14.         }
  15.     }
  16.     return res;
  17. }
  18.  
  19. matrix operator*(const matrix &a, matrix &b) {
  20.     return matrixProduct(a, b);
  21. }
  22.  
  23. matrix binpow(matrix a, ll k) {
  24.     int n = a.size();
  25.     int m = a[0].size();
  26.     matrix res(n, vector<ll>(m));
  27.     if (k == 0) {
  28.         for (int i = 0; i < n; i++) {
  29.             res[i][i] = 1;
  30.         }
  31.         return res;
  32.     }
  33.     res = a;
  34.     k--;
  35.     while (k) {
  36.         if (k & 1) res = res * a;
  37.         a = a * a;
  38.         k >>= 1;
  39.     }
  40.     return res;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement