Advertisement
Manioc

1748

Aug 2nd, 2018
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const long long MAX = 1e18 + 7LL;
  5. typedef long long ll;
  6. typedef pair<ll,ll> pll;
  7.  
  8. ll primes[] = {2,3 ,5, 7, 11, 13,17, 19, 23,29, 31, 37, 41, 43, 47, 53, 59};
  9. ll number;
  10.  
  11. pll solve(int idx = 0 , ll val = 1, ll qnt = 1, int maxi = 70){
  12.     if(val > number || val < 0) return make_pair(MAX,0);
  13.     if(idx > 16) return make_pair(val, qnt);
  14.  
  15.     ll power = 1;
  16.     pll ans = make_pair(MAX,0);
  17.     for(int i = 0; i <= maxi; i++){
  18.         if(val*power <= number){
  19.             pll aux = solve(idx+1, val*power, qnt*(i+1), i);
  20.             if(aux.second >= ans.second){
  21.                 if(aux.second == ans.second) ans.first = min(aux.first, ans.first);
  22.                 else ans.first = aux.first;
  23.                 ans.second = aux.second;
  24.             }
  25.             power *= primes[idx];
  26.         }else break;
  27.     }
  28.  
  29.     return ans;
  30. }
  31. int main(){
  32.     int cases; cin >> cases;
  33.     while(cases--){
  34.         cin >> number;
  35.         pll resp = solve();
  36.         //if(resp == make_pair(MAX,0LL)) while(true){}
  37.         cout << resp.first << " " << resp.second << endl;
  38.     }
  39.     return 0;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement