Advertisement
Guest User

Beautiful Sums

a guest
Jan 23rd, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.60 KB | None | 0 0
  1. #pragma GCC optimize ("Ofast,unroll-loops")
  2. #pragma GCC target ("sse,sse2,sse3,ssse3,sse4")
  3. #pragma GCC target ("popcnt,abm,mmx,avx,tune=native")
  4.  
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7. #define sz(x) int(x.size())
  8. #define pb push_back
  9. #define FER(i,a,b) for(int i = ll(a); i < ll(b); ++i)
  10. #define IFR(i,a,b) for(int i = ll(a); i >= ll(b); --i)
  11. #define all(v) (v).begin(),(v).end()
  12. #define mp make_pair
  13. #define ff first
  14. #define ss second
  15. #define tm1 first
  16. #define tm2 second.first
  17. #define tm3 second.second
  18. #define fill(x,v) memset(x,v,sizeof(x))
  19. #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
  20. #define sqr(x) (x)*(x)
  21. #define bas 987625403
  22. typedef long double ld;
  23. typedef long long ll;
  24. typedef pair<ll,ll> ii;
  25. typedef pair<ll,ii> tri;
  26. typedef vector<ll> vi;
  27. typedef vector<ii> vii;
  28. #define trace(...) fff(#__VA_ARGS__,__VA_ARGS__)
  29.  
  30. const int oo = 1e9;
  31. template<typename t> void fff(const char *x, t&& val1){
  32.    cout << x << " : " << val1 << endl;
  33. }
  34.  
  35. template<typename t1, typename... t2> void fff(const char *x, t1&& val1, t2&&... val2){
  36.    const char *xd = strchr(x+1,',');
  37.    cout.write(x,xd-x)<< " : " << val1 << " | ";
  38.    fff(xd+1,val2...);
  39. }
  40.  
  41. const int MAX = 1e5;
  42. int is[MAX + 1], sp[MAX + 1];
  43. vector<ll> pri;
  44.  
  45. void criba(){
  46.     for(ll i = 2; i <= MAX; i ++){
  47.         if(!is[i]){
  48.             sp[i] = i;
  49.             if(i != 2) pri.pb(i);
  50.             for(ll j = 2 * i; j <= MAX; j += i){
  51.                 if(!sp[j]) sp[j] = i;
  52.                 is[j] = 1;
  53.             }
  54.         }
  55.     }
  56. }
  57.  
  58. vector<ll> facts;
  59. map<int, vector<int> > factsMap;
  60. const ll MOD = 1e9 + 9;
  61.  
  62. void factorize(ll n){
  63.     for(ll x = 1; x <= n; x ++){
  64.         if(n % x == 0) facts.pb(x);
  65.     }
  66.     for(ll i = 0; i < sz(facts); i ++){
  67.         for(ll x = 2; x <= facts[i]; x ++){
  68.             if(facts[i] % x == 0) {
  69.                 factsMap[facts[i]].pb(x);
  70.             }
  71.         }
  72.     }
  73. }
  74.  
  75. ll cur[22], ans[22];
  76. ld low = 1e300;
  77.  
  78. void go(ll lastk, ll index, ll remprod, ld acc){
  79.     if(remprod == 1){
  80.         if(acc < low){
  81.             low = acc;
  82.             FER(i, 0, index) ans[i] = cur[i];
  83.             ans[index] = -1;
  84.         }
  85.         return;
  86.     }
  87.     for(ll i = 0; i < sz(factsMap[remprod]); i ++){
  88.         ll k = factsMap[remprod][i];
  89.         if(k > lastk) break;
  90.         cur[index] = k;
  91.         go(k, index + 1, remprod / k, acc + (k - 1) * log(pri[index]));
  92.     }
  93. }
  94.  
  95. ll bp(ll base, ll expo){
  96.     if(expo == 0) return 1;
  97.     if(expo % 2) return (base * bp(base, expo - 1))%MOD;
  98.     ll val = bp(base, expo / 2);
  99.     return sqr(val) % MOD;
  100. }
  101.  
  102. int main(){
  103.     fastio;
  104.     criba();
  105.     ll n; cin >> n;
  106.     factorize(n);
  107.     go(1e9, 0, n, 0);
  108.     int pos = 0;
  109.     ll ret = 1;
  110.     while(ans[pos] != -1){
  111.         ret *= bp(pri[pos], ans[pos] - 1);
  112.         ret %= MOD;
  113.         pos ++;
  114.     }
  115.     cout << ret << endl;
  116.     return 0;
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement