summaryrefslogtreecommitdiff
path: root/math/linearRecurence.cpp
diff options
context:
space:
mode:
authorGloria Mundi <gloria@gloria-mundi.eu>2024-02-27 15:56:26 +0100
committerGloria Mundi <gloria@gloria-mundi.eu>2024-02-27 15:56:26 +0100
commitdb5ee187a9fb8d9338c74e74c2d2b4b38b2ab586 (patch)
tree8ccff842faf25cb0d8a2d986572152ef5ad2b9b5 /math/linearRecurence.cpp
parentf0ae8e44eb9b2c5fe3f555643a77ac45d5856e75 (diff)
minor formatting and spelling fixes
Diffstat (limited to 'math/linearRecurence.cpp')
-rw-r--r--math/linearRecurence.cpp33
1 files changed, 0 insertions, 33 deletions
diff --git a/math/linearRecurence.cpp b/math/linearRecurence.cpp
deleted file mode 100644
index 2501e64..0000000
--- a/math/linearRecurence.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-constexpr ll mod = 1'000'000'007;
-vector<ll> modMul(const vector<ll>& a, const vector<ll>& b,
- const vector<ll>& c) {
- ll n = sz(c);
- vector<ll> res(n * 2 + 1);
- for (int i = 0; i <= n; i++) { //a*b
- for (int j = 0; j <= n; j++) {
- res[i + j] += a[i] * b[j];
- res[i + j] %= mod;
- }}
- for (int i = 2 * n; i > n; i--) { //res%c
- for (int j = 0; j < n; j++) {
- res[i - 1 - j] += res[i] * c[j];
- res[i - 1 - j] %= mod;
- }}
- res.resize(n + 1);
- return res;
-}
-
-ll kthTerm(const vector<ll>& f, const vector<ll>& c, ll k) {
- assert(sz(f) == sz(c));
- vector<ll> tmp(sz(c) + 1), a(sz(c) + 1);
- tmp[0] = a[1] = 1; //tmp = (x^k) % c
-
- for (k++; k > 0; k /= 2) {
- if (k & 1) tmp = modMul(tmp, a, c);
- a = modMul(a, a, c);
- }
-
- ll res = 0;
- for (int i = 0; i < sz(c); i++) res += (tmp[i+1] * f[i]) % mod;
- return res % mod;
-}