From b53bdf16ecdea0491d1eb87069f67a87b3b6893c Mon Sep 17 00:00:00 2001 From: Kushagra Nigam Date: Fri, 6 Dec 2019 02:43:16 +0530 Subject: [PATCH] Matrix Exponentiation (#589) * Matrix Exponentiation * Update and rename Others/Matrix_Expo.cpp to others/matrix_exponentiation.cpp * Update matrix_exponentiation.cpp * clang-format -i -style="{BasedOnStyle: Google, IndentWidth: 4}" matrix_exponentiation.cpp * clang-format -i -style="{IndentWidth: 4}" matrix_exponentiation.cpp * Fix cpplint readability/braces issue * using std::cin; using std::cout; using std::vector; * added int_64 instead of long long * Minor changes * Update matrix_exponentiation.cpp --- .DS_Store | Bin 0 -> 6148 bytes Others/.DS_Store | Bin 0 -> 6148 bytes Others/a.out | Bin 0 -> 72920 bytes others/matrix_exponentiation.cpp | 119 +++++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+) create mode 100644 .DS_Store create mode 100644 Others/.DS_Store create mode 100755 Others/a.out create mode 100644 others/matrix_exponentiation.cpp diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..ab5825a1870609ff8f986f1d3d79dfec591f7a6f GIT binary patch literal 6148 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

ucT#QhGP>E25P>oQ7@Kc0ZggOMA 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 IHDVb52lV}xl>h($ literal 0 HcmV?d00001 diff --git a/others/matrix_exponentiation.cpp b/others/matrix_exponentiation.cpp new file mode 100644 index 000000000..16a272988 --- /dev/null +++ b/others/matrix_exponentiation.cpp @@ -0,0 +1,119 @@ +/* +Matrix Exponentiation. +The problem can be solved with DP but constraints are high. +ai = bi (for i <= k) +ai = c1*ai-1 + c2*ai-2 + ... + ck*ai-k (for i > k) +Taking the example of Fibonacci series, K=2 +b1 = 1, b2=1 +c1 = 1, c2=1 +a = 0 1 1 2 .... +This way you can find the 10^18 fibonacci number%MOD. +I have given a general way to use it. The program takes the input of B and C +matrix. +Steps for Matrix Expo +1. Create vector F1 : which is the copy of B. +2. Create transpose matrix (Learn more about it on the internet) +3. Perform T^(n-1) [transpose matrix to the power n-1] +4. Multiply with F to get the last matrix of size (1xk). +The first element of this matrix is the required result. +*/ + +#include +using std::cin; +using std::cout; +using std::vector; + +#define ll int64_t +#define endl '\n' +#define pb push_back +#define MOD 1000000007 +ll ab(ll x) { return x > 0LL ? x : -x; } +ll k; +vector a, b, c; + +// To multiply 2 matrix +vector> multiply(vector> A, vector> B) { + vector> C(k + 1, vector(k + 1)); + for (ll i = 1; i <= k; i++) { + for (ll j = 1; j <= k; j++) { + for (ll z = 1; z <= k; z++) { + C[i][j] = (C[i][j] + (A[i][z] * B[z][j]) % MOD) % MOD; + } + } + } + return C; +} + +// computing power of a matrix +vector> power(vector> A, ll p) { + if (p == 1) + return A; + if (p % 2 == 1) { + return multiply(A, power(A, p - 1)); + } else { + vector> X = power(A, p / 2); + return multiply(X, X); + } +} + +// main function +ll ans(ll n) { + if (n == 0) + return 0; + if (n <= k) + return b[n - 1]; + // F1 + vector F1(k + 1); + for (ll i = 1; i <= k; i++) + F1[i] = b[i - 1]; + + // Transpose matrix + vector> T(k + 1, vector(k + 1)); + for (ll i = 1; i <= k; i++) { + for (ll j = 1; j <= k; j++) { + if (i < k) { + if (j == i + 1) + T[i][j] = 1; + else + T[i][j] = 0; + continue; + } + T[i][j] = c[k - j]; + } + } + // T^n-1 + T = power(T, n - 1); + + // T*F1 + ll res = 0; + for (ll i = 1; i <= k; i++) { + res = (res + (T[1][i] * F1[i]) % MOD) % MOD; + } + return res; +} + +// 1 1 2 3 5 + +int main() { + cin.tie(0); + cout.tie(0); + ll t; + cin >> t; + ll i, j, x; + while (t--) { + cin >> k; + for (i = 0; i < k; i++) { + cin >> x; + b.pb(x); + } + for (i = 0; i < k; i++) { + cin >> x; + c.pb(x); + } + cin >> x; + cout << ans(x) << endl; + b.clear(); + c.clear(); + } + return 0; +}