#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef vector<int> VI; typedef vector<LL> VLL; typedef vector<VI> VVI; typedef pair<int, int> PII; // #define int LL #define FOR(i, a, b) for (int i = (a); i <= (b); ++i) #define REP(i, n) for (int i = 0; i < (n); ++i) #define FORE(i, x) for (__typeof((x).begin()) i = (x).begin(); i != (x).end(); ++i) template <typename T> void _debug(const char *msg, T t) { cerr << msg << "="<< t << "\n"; } template <typename T, typename... R> void _debug(const char *msg, T t, R... r) { while(*msg != ',') cerr << *msg++; cerr << "=" << t << ", "; _debug(msg+1, r...); } #ifdef TEST_ON_LOCAL_MACHINE #define LOCAL #endif #ifdef LOCAL #define debug(...) _debug(#__VA_ARGS__, __VA_ARGS__) #define debugv(x) { cerr << #x << " = "; FORE(itt, x) cerr << *itt << ", "; cerr << "\n"; } #define INIT() ios_base::sync_with_stdio(0); cin.tie(0); #else #define debug(...) #define debugv(x) #define INIT() ios_base::sync_with_stdio(0); #endif // as windows doesn't have thread unsafe version of puchar and getchar define // to use thread save variants #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) #define getchar_unlocked() getchar() #define putchar_unlocked(a) putchar(a) #endif template<class T = int64_t> inline T readInt(){ T ret; char tmp; int sign = 1; tmp = getchar_unlocked(); if(tmp == '-') ret = (getchar_unlocked() - '0'), sign = -1; else ret = tmp -'0'; while(tmp = getchar_unlocked(), tmp >= '0' && tmp <='9'){ ret *= 10; ret += tmp - '0'; } return ret*sign; } template<class T, short charsCount = short(std::log10(std::numeric_limits<T>::max())+2)> inline void putInt(T arg){ if(arg < 0) putchar_unlocked('-'), arg *= -1; char chars[charsCount]; int digits = 0; do { chars[digits++] = (arg%10) + '0'; arg /= 10; } while(arg); while(digits) putchar_unlocked(chars[--digits]); } vector<int> primes; ULL getBest(ULL n) { if(n == 1) return 1; if(n == 0) return 0; ULL best = 1; for(const auto &i : primes){ ULL tmp = getBest(n/i)*i; if(tmp > best) best = tmp; } return best; } int main(){ ULL k ,n, tmp; cin >> k >> n; for(int i = 0; i < k; ++i){ cin >> tmp; primes.push_back(tmp); } cout << getBest(n); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef vector<int> VI; typedef vector<LL> VLL; typedef vector<VI> VVI; typedef pair<int, int> PII; // #define int LL #define FOR(i, a, b) for (int i = (a); i <= (b); ++i) #define REP(i, n) for (int i = 0; i < (n); ++i) #define FORE(i, x) for (__typeof((x).begin()) i = (x).begin(); i != (x).end(); ++i) template <typename T> void _debug(const char *msg, T t) { cerr << msg << "="<< t << "\n"; } template <typename T, typename... R> void _debug(const char *msg, T t, R... r) { while(*msg != ',') cerr << *msg++; cerr << "=" << t << ", "; _debug(msg+1, r...); } #ifdef TEST_ON_LOCAL_MACHINE #define LOCAL #endif #ifdef LOCAL #define debug(...) _debug(#__VA_ARGS__, __VA_ARGS__) #define debugv(x) { cerr << #x << " = "; FORE(itt, x) cerr << *itt << ", "; cerr << "\n"; } #define INIT() ios_base::sync_with_stdio(0); cin.tie(0); #else #define debug(...) #define debugv(x) #define INIT() ios_base::sync_with_stdio(0); #endif // as windows doesn't have thread unsafe version of puchar and getchar define // to use thread save variants #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) #define getchar_unlocked() getchar() #define putchar_unlocked(a) putchar(a) #endif template<class T = int64_t> inline T readInt(){ T ret; char tmp; int sign = 1; tmp = getchar_unlocked(); if(tmp == '-') ret = (getchar_unlocked() - '0'), sign = -1; else ret = tmp -'0'; while(tmp = getchar_unlocked(), tmp >= '0' && tmp <='9'){ ret *= 10; ret += tmp - '0'; } return ret*sign; } template<class T, short charsCount = short(std::log10(std::numeric_limits<T>::max())+2)> inline void putInt(T arg){ if(arg < 0) putchar_unlocked('-'), arg *= -1; char chars[charsCount]; int digits = 0; do { chars[digits++] = (arg%10) + '0'; arg /= 10; } while(arg); while(digits) putchar_unlocked(chars[--digits]); } vector<int> primes; ULL getBest(ULL n) { if(n == 1) return 1; if(n == 0) return 0; ULL best = 1; for(const auto &i : primes){ ULL tmp = getBest(n/i)*i; if(tmp > best) best = tmp; } return best; } int main(){ ULL k ,n, tmp; cin >> k >> n; for(int i = 0; i < k; ++i){ cin >> tmp; primes.push_back(tmp); } cout << getBest(n); } |