diff --git a/include.hh b/include.hh index a30e9ef..50dafe3 100644 --- a/include.hh +++ b/include.hh @@ -24,6 +24,7 @@ using ull = uint64_t; #else using ll = long long; using ull = unsigned long long; +using ld = long double; #endif using int128 = __int128_t; using uint128 = __uint128_t; @@ -236,6 +237,7 @@ ll inverse(ll a, ll b) { } vector> decompose(ll x) { + // return (factor, count, factor ** count) vector> res; for (int i = 2; i * i <= x; i++) { if (x % i == 0) { @@ -251,6 +253,22 @@ vector> decompose(ll x) { return res; } +vector decompose_prime(int N) { + // return (factor, count) + vector result; + for (int i = 2; i * i <= N; i++) { + if (N % i == 0) { + int cnt = 0; + while (N % i == 0) N /= i, ++cnt; + result.emplace_back(i, cnt); + } + } + if (N != 1) { + result.emplace_back(N, 1); + } + return result; +} + /* string algorithms */ vector calc_next(string t) { // pi function of t int n = (int)t.length();