Skip to content

Commit 6c49d53

Browse files
committed
feat: added factorize function to utils.hpp
1 parent 905c19a commit 6c49d53

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

src/alfred/math/utils.hpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,23 @@ std::pair<std::vector<int>, std::vector<int>> euler_sieve(int n) {
7474
return std::make_pair(primes, minp);
7575
}
7676

77+
template <class T>
78+
std::vector<std::pair<T, int>> factorize(T n) { // O(sqrt(n)) factorization.
79+
std::vector<std::pair<T, int>> vec;
80+
for (T i = 2; i * i <= n; i++) {
81+
int cnt = 0;
82+
if (n % i != 0) continue;
83+
while (n % i == 0) {
84+
n /= i, cnt++;
85+
}
86+
vec.push_back({i, cnt});
87+
}
88+
if (n != 1) {
89+
vec.push_back({n, 1});
90+
}
91+
return vec;
92+
}
93+
7794
template <class T>
7895
inline T ceilDiv(T n, T m) {
7996
if (m < 0) m = -m, n = -n;

0 commit comments

Comments
 (0)