C++ Quick Pow & Matrix Quick Pow Template

Run Settings
LanguageC++
Language Version
Run Command
/* C++ Quick Pow with Mod & Matrix Quick Pow with Mod Template By meowjiao C++ Quick Pow with Mod & Matrix Quick Pow with Mod Template by meowjiao is marked CC0 1.0. To view a copy of this mark, visit https://creativecommons.org/publicdomain/zero/1.0/ Update: 2024.05 2025.07 2025.12 */ // Quick Pow long long qpow(long long a, long long b, long long mod) { a %= mod; long long ans = 1; while (b) { if (b & 1) { ans = (ans * a) % mod; } a = (a * a) % mod; b >>= 1; } return ans; } // Matrix Quick Pow struct Matrix { int n, m, a[4][4]; Matrix() { n = m = 0; memset(a, 0, sizeof(a)); } Matrix(int x, int y) { n = x; m = y; memset(a, 0, sizeof(a)); } Matrix(int x) { n = m = x; memset(a,0,sizeof(a)); for (int i = 0; i < n; i++) { a[i][i] = 1; } } Matrix operator+(const Matrix &b) const { Matrix c(n, m); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { c.a[i][j] = ((long long)a[i][j] + b.a[i][j]) % mod; } } return c; } Matrix operator+=(const Matrix &b) { return *this = *this + b; } Matrix operator*(const Matrix &b) const { Matrix c(n, b.m); for (int i = 0; i < n; i++) { for (int j = 0; j < b.m; j++) { for (int k = 0; k < m; k++) { c.a[i][j] = ((((long long)a[i][k] * b.a[k][j]) % mod) + c.a[i][j]) % mod; } } } return c; } Matrix operator*=(const Matrix &b) { return *this = *this * b; } Matrix operator^(long long k) const { Matrix t = *this, ans(n); while (k) { if (k & 1) { ans *= t; } t *= t; k >>= 1; } return ans; } Matrix operator^=(long long k) { return *this = *this ^ k; } };
Editor Settings
Theme
Key bindings
Full width
Lines