Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define fi first
- #define se second
- #define pb push_back
- #define pf push_front
- #define popb pop_back
- #define popf pop_front
- #define ins insert
- #define pq priority_queue
- #define minele min_element
- #define maxele max_element
- #define lb lower_bound //first pos >= val
- #define ub upper_bound // first pos > val
- #define cnt_bit __builtin_popcount
- #define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
- //#pragma GCC optimize("Ofast")
- //#pragma GCC target("avx,avx2,fma")
- using namespace std;
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<ll, ll> pll;
- typedef pair<int, int> pii;
- int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1};
- int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1};
- int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1};
- const ll oo = 1e18;
- const ll maxN = 1e6;
- const ull INF = 1e19;
- /* Author : Le Ngoc Bao Anh, 10A5, LQD High School for Gifted Student */
- void maximize(int &a, int b) {
- a = max(a, b);
- }
- void minimize(int &a, int b) {
- a = min(a, b);
- }
- ull prime[200];
- ull cnt[200];
- ull LOG[200];
- ull ans;
- ull C(ull n, ull k) {
- ull ans = 1;
- if(k < n - k) k = n - k;
- for(ull i = n; i >= k + 1; i--) ans *= i;
- for(ull i = 1; i <= n - k; i++) ans /= i;
- return ans;
- }
- void f(ull n, ull prev, ull id, ull x, ull tot, ull num = 0) {
- if(x > INF || x <= 0 || id > 20) return;
- if(tot == n) {
- ans = min(ans, x);
- return;
- }
- if(tot > n || tot <= 0) return;
- ull mul = 1;
- prev = min(prev, LOG[id] - 10);
- for(int i = 1; i <= prev; i++) {
- mul = mul * prime[id];
- ull new_add = tot * C(num + i, i);
- f(n, i, id + 1, x * mul, new_add, num + i);
- }
- }
- void solve(ull n) {
- ans = INF;
- f(n, 60, 1, 1, 1, 0);
- if(n == 1) ans = 2;
- LOG[1] = 60;
- LOG[2] = 40;
- LOG[3] = 27;
- LOG[4] = 22;
- LOG[5] = 18;
- LOG[6] = 17;
- LOG[7] = 15;
- LOG[8] = 15;
- LOG[9] = 14;
- LOG[10] = 12;
- LOG[11] = 12;
- LOG[13] = 12;
- LOG[14] = 11;
- LOG[15] = 11;
- LOG[16] = 11;
- LOG[17] = LOG[18] = LOG[19] = LOG[20] = 10;
- cout << n << " " << ans << endl;
- }
- int main()
- {
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #else
- //online
- #endif
- int tc = 1, ddd = 0;
- // cin >> tc;
- ull n;
- int count = 0;
- for(int i = 2; i <= 100; i++) {
- bool ok = true;
- for(int j = 2; j <= i - 1; j++) if(i % j == 0) ok = false;
- if(ok) {
- count++;
- prime[count] = i;
- if(count == 20) break;
- }
- }
- while(cin >> n) {
- //ddd++;
- //cout << "Case #" << ddd << ": ";
- solve(n);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement