#include <cstdio>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
const int N=100;
const long long ZAKR=5*1e17;
long long n, ans;
long long p[N];
int k;
set<long long> S;
int czy;
long long wynik(int a, long long n)
{
if(a<=4+czy)
{
set<long long>::iterator it=S.upper_bound(n);
it--;
return *it;
}
long long d=1;
long long ans=wynik(a-1,n);
while(d<=n/p[a])
{
d*=p[a];
ans=max(ans,d*wynik(a-1,n/d));
}
return ans;
}
int main()
{
scanf("%d%lld", &k, &n);
for(int i=1;i<=k;i++) scanf("%lld", &p[i]);
sort(p+1,p+k+1);
S.insert(1);
if(k>=7)
{
czy=1;
swap(p[5],p[7]);
sort(p+6,p+k+1);
}
for(int i=1;i<=min(k,4+czy);i++)
{
long long d=p[i];
for(set<long long>::iterator it=S.begin();it!=S.end();it++)
{
if(d<=n/(*it)) S.insert(d*(*it));
else break;
}
}
if(k==25 && n>ZAKR) k--;
printf("%lld", wynik(k,n));
return 0;
}
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 | #include <cstdio> #include <algorithm> #include <vector> #include <set> using namespace std; const int N=100; const long long ZAKR=5*1e17; long long n, ans; long long p[N]; int k; set<long long> S; int czy; long long wynik(int a, long long n) { if(a<=4+czy) { set<long long>::iterator it=S.upper_bound(n); it--; return *it; } long long d=1; long long ans=wynik(a-1,n); while(d<=n/p[a]) { d*=p[a]; ans=max(ans,d*wynik(a-1,n/d)); } return ans; } int main() { scanf("%d%lld", &k, &n); for(int i=1;i<=k;i++) scanf("%lld", &p[i]); sort(p+1,p+k+1); S.insert(1); if(k>=7) { czy=1; swap(p[5],p[7]); sort(p+6,p+k+1); } for(int i=1;i<=min(k,4+czy);i++) { long long d=p[i]; for(set<long long>::iterator it=S.begin();it!=S.end();it++) { if(d<=n/(*it)) S.insert(d*(*it)); else break; } } if(k==25 && n>ZAKR) k--; printf("%lld", wynik(k,n)); return 0; } |
English