#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, a, b) for (int i = (a); i < (b); i++)
#define per(i, a, b) for (int i = (b) - 1; i <= (a); i--)
int k;
ll n;
ll lim;
vector<int>p;
vector<int>res;
void rec(int i, ll m) {
bool first = true;
while (m <= lim) {
if (!first)
res.push_back(m);
first = false;
if (i < k - 1)
rec(i + 1, m);
m *= p[i];
}
}
ll prod(ll a, ll b) {
return a * b;
}
// int ca = 64 - __builtin_clzll(a), cb =
int main(void)
{
ios::sync_with_stdio(false);
cin >> k>>n;
p.resize(k, -1);
rep(i, 0, k)
cin >> p[i];
sort(p.begin(), p.end());
lim = min(((ll)(sqrt(n + 100) + 100) * p.back()), n);
rec(0, 1);
sort(res.begin(), res.end());
int l = res.size();
int ptr = l - 1;
ll best = 0;
rep(i, 0, l) {
ll p = res[i];
ll div = n / p;
while (ptr && res[ptr] > div)
ptr--;
if (p * res[ptr] < n)
best = max(best, p * res[ptr]);
}
// cout << res.size()<<"\n";
cout <<best<<"\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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i, a, b) for (int i = (a); i < (b); i++) #define per(i, a, b) for (int i = (b) - 1; i <= (a); i--) int k; ll n; ll lim; vector<int>p; vector<int>res; void rec(int i, ll m) { bool first = true; while (m <= lim) { if (!first) res.push_back(m); first = false; if (i < k - 1) rec(i + 1, m); m *= p[i]; } } ll prod(ll a, ll b) { return a * b; } // int ca = 64 - __builtin_clzll(a), cb = int main(void) { ios::sync_with_stdio(false); cin >> k>>n; p.resize(k, -1); rep(i, 0, k) cin >> p[i]; sort(p.begin(), p.end()); lim = min(((ll)(sqrt(n + 100) + 100) * p.back()), n); rec(0, 1); sort(res.begin(), res.end()); int l = res.size(); int ptr = l - 1; ll best = 0; rep(i, 0, l) { ll p = res[i]; ll div = n / p; while (ptr && res[ptr] > div) ptr--; if (p * res[ptr] < n) best = max(best, p * res[ptr]); } // cout << res.size()<<"\n"; cout <<best<<"\n"; } |
English