#include<bits/stdc++.h>
#define ll long long
#define N 3000005
#define M 45
using namespace std;
ll n,k,a[M],b[M],s[N],cnt=0,ans=0,s1[N],cnt1=0,l=0,r=1e18;
ll MAX=1e18;
void dfs(int x,bool flag,ll sum){
if(flag==0)s[++cnt]=sum;
else s1[++cnt1]=sum;
if(x>n){
return ;
}
for (ll i=1;;i*=a[x]){
if(MAX/i<sum) break;
dfs(x+2,flag,sum*i);
}
}
bool check(ll mid){
ll l=1,r=cnt1,sum=0;
while(l<=cnt){
while(s1[r]>mid/s[l] and r>=1) r--;
sum+=r;
l++;
}
return sum>=k;
}
int main(){
cin>>n;
for (int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1);
cin>>k;
dfs(1,0,1);
dfs(2,1,1);
sort(s+1,s+cnt+1);
sort(s1+1,s1+cnt1+1);
cnt=unique(s+1,s+cnt+1)-s-1;
cnt1=unique(s1+1,s1+cnt1+1)-s1-1;
while(l<r){
ll mid=l+r>>1;
if(check(mid)){
r=mid;
}
else l=mid+1;
}
cout<<r;
return 0;
}
为什么 MAX/i<sum 是正确的而 MAX/sum<i 是错误的。