Advertisement
Guest User

Untitled

a guest
Dec 31st, 2023
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <map>
  5.  
  6. using namespace std;
  7.  
  8. map<int, int> factorize(int n) {
  9.     vector<int> sieve(n + 1, 1);
  10.     sieve[0] = sieve[1] = 0;
  11.  
  12.     for (int i = 2; i <= n; ++i) {
  13.         if (sieve[i] != 1)
  14.             continue;
  15.  
  16.         for (long long j = 1LL * i * i; j <= n; j += i) {
  17.             sieve[j] = i;
  18.         }
  19.     }
  20.  
  21.     if (sieve[n] == 1)
  22.         return { {1, 1}, {n, 1} };
  23.  
  24.     map<int, int> prime_factors;
  25.     while (sieve[n] > 1) {
  26.         ++prime_factors[sieve[n]];
  27.         n /= sieve[n];
  28.     }
  29.  
  30.     ++prime_factors[n];
  31.     return prime_factors;
  32. }
  33.  
  34. vector<int> solve(int n) {
  35.     map<int, int> prime_factors = factorize(n);
  36.     vector<int> result(2);
  37.     result[0] = 1;
  38.  
  39.     int max_exp = 0;
  40.     int min_exp = INT_MAX;
  41.     for (const pair<const int, int>& factor : prime_factors) {
  42.         max_exp = max(max_exp, factor.second);
  43.         min_exp = min(min_exp, factor.second);
  44.  
  45.         result[0] *= factor.first;
  46.     }
  47.  
  48.     result[1] = ceil(log2(max_exp));
  49.     if (max_exp != min_exp || (max_exp & (max_exp - 1)) != 0)
  50.         result[1] += 1;
  51.  
  52.     return result;
  53. }
  54.  
  55. int main()
  56. {
  57.     int n;
  58.     cin >> n;
  59.  
  60.     vector<int> result = solve(n);
  61.     cout << result[0] << " " << result[1];
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement