
对式子进行化简后可得

对左边的式子整体进行因式分解,可以发现d和另一个元素的值最多有一个>=sqrt(k+sigma(a_i))(可由反证法证得)
考虑到可以枚举i,范围为1--sqrt(k+sigma(a_i)),每次将d设为i和(k+sigma(a_i))/i,就可以将所有可能性全部遍历。
#include<cstdio>
#include<iostream>
#include<cmath>
#define ll long long
using namespace std;
ll a[200],n,maxValue;
bool isOk(ll d){
ll tmpSum=0;
for(ll i=1;i<=n;i++){
tmpSum+=(a[i]-1)/d;
}
tmpSum+=n;
return maxValue>=(d*tmpSum);
}
int main(){
ll k;
scanf("%lld%lld",&n,&k);
maxValue=k;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
maxValue+=a[i];
}
ll ans=0;
for(ll i=1;i*i<=maxValue;i++){
if(isOk(i))ans=max(ans,i);
if(isOk(maxValue/i))ans=max(ans,maxValue/i);
}
printf("%lld\n",ans);
return 0;
}