#include #define int long long using namespace std; string to_string(string s) { return s; } template string to_string(T v) { string res = "["; for (const auto &x : v) { res += to_string(x) + ", "; } res += "]"; return res; } void dbg_out() { cout << endl; } template void dbg_out(Head H, Tail... T) { cout << ' ' << to_string(H); dbg_out(T...); } #ifdef DEBUG #define dbg(...) cout << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__) #else #define dbg(...) #endif using ll = long long; using vi = vector; #define rep(i, a, b) for (int i = (a); i < (b); ++i) #define all(v) (v).begin(), (v).end() #define sz(v) ((int)(v).size()) mt19937 rng(69420); int randint(int lb, int ub) { return uniform_int_distribution(lb, ub - 1)(rng); } const int MAXN = 200 * 1000 + 10; vector tab(MAXN); int N; long double calcul(int x, int y) { long double sol = 0.0; for (int i = 0 ; i < N ; i++) { sol += (long double)((int)(tab[i] + x - 1) / x) / y; } return sol; } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); int K; cin >> N >> K; for (int i = 0 ; i < N ; i++) { cin >> tab[i]; } int maxi = 1; for (int i = 1 ; i < K ; i++) { if (maxi * (K - maxi) < i * (K - i)) maxi = i; } int best = maxi; for (int i = max(1ll , maxi - 1000) ; i <= min(K - 1 , maxi + 1000) ; i++) { if (calcul(best,K - best) > calcul(i , K - i)) { best = i; } } for (int turn = 0 ; turn < 1000 ; turn++) { int i = randint(0, N); for (int divi = K-1; divi >= 1; --divi) if (tab[i] % divi == 0) { if (calcul(best,K - best) > calcul(divi , K - divi)) { best = divi; } if (calcul(best,K - best) > calcul(K - divi , divi)) { best = K - divi; } break; } } cout<