Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Mat = vector<vector<ll>>;
- Mat mul(Mat &A, Mat &B) {
- int r = (int)A.size(), c = (int)B[0].size();
- Mat C(r, vector<long long>(c));
- for (int i = 0; i < r; i++)
- for (int j = 0; j < c; j++) {
- ll v = 0;
- for (int k = 0; k < c; k++) v = (v + A[i][k] * B[k][j]) % mod;
- C[i][j] = v;
- }
- return C;
- }
- Mat exp(Mat &A, long long e) {
- int r = (int)A.size(), c = (int)A[0].size();
- Mat C(r, vector<long long>(c));
- for(int i = 0; i < r; i ++) C[i][i] = 1;
- Mat B = A;
- while (true) {
- if (e & 1) C = mul(C, B);
- e >>= 1;
- if (e == 0) break;
- B = mul(B, B);
- }
- return C;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement