Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- #include <map>
- using namespace std;
- map<int, int> factorize(int n) {
- vector<int> sieve(n + 1, 1);
- sieve[0] = sieve[1] = 0;
- for (int i = 2; i <= n; ++i) {
- if (sieve[i] != 1)
- continue;
- for (long long j = 1LL * i * i; j <= n; j += i) {
- sieve[j] = i;
- }
- }
- if (sieve[n] == 1)
- return { {1, 1}, {n, 1} };
- map<int, int> prime_factors;
- while (sieve[n] > 1) {
- ++prime_factors[sieve[n]];
- n /= sieve[n];
- }
- ++prime_factors[n];
- return prime_factors;
- }
- vector<int> solve(int n) {
- map<int, int> prime_factors = factorize(n);
- vector<int> result(2);
- result[0] = 1;
- int max_exp = 0;
- int min_exp = INT_MAX;
- for (const pair<const int, int>& factor : prime_factors) {
- max_exp = max(max_exp, factor.second);
- min_exp = min(min_exp, factor.second);
- result[0] *= factor.first;
- }
- result[1] = ceil(log2(max_exp));
- if (max_exp != min_exp || (max_exp & (max_exp - 1)) != 0)
- result[1] += 1;
- return result;
- }
- int main()
- {
- int n;
- cin >> n;
- vector<int> result = solve(n);
- cout << result[0] << " " << result[1];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement