/* -*- coding: utf-8 -*- * * 2570.cc: No.2570 最大最大公約数 - yukicoder */ #include #include #include using namespace std; /* constant */ const int MAX_N = 100; /* typedef */ typedef long long ll; typedef vector vl; /* global variables */ ll as[MAX_N]; /* subroutines */ /* main */ int main() { int n, k; scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) scanf("%lld", as + i); vl ds; for (int i = 0; i < n; i++) for (ll p = 1; p * p <= as[i]; p++) if (as[i] % p == 0) { ds.push_back(p); ll q = as[i] / p; if (q != p) ds.push_back(q); } sort(ds.begin(), ds.end()); ds.erase(unique(ds.begin(), ds.end()), ds.end()); ll maxg = 1; for (int i = ds.size() - 1; i >= 0; i--) { ll g = ds[i], sum = 0; for (int j = 0; j < n; j++) { ll r = as[j] % g; sum += min(r, g - r); } if (sum <= k) { maxg = g; break; } } printf("%lld\n", maxg); return 0; }