@hzwer
从大到小枚举答案gcd
开桶统计每个数出现次数
枚举gcd的倍数求到底有几个是gcd的倍数
若大于
,则输出
复杂度调和级数
Code:
#include <bits/stdc++.h>
#define maxn 1000010
using namespace std;
int n, m, cnt[maxn];
inline int read(){
int s = 0, w = 1;
char c = getchar();
for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
return s * w;
}
int main(){
// freopen("gcd.in", "r", stdin);
// freopen("gcd.out", "w", stdout);
n = read() ,m = read();
for (int i = 1; i <= n; ++i) ++cnt[read()];
for (int i = 500000; i; --i){
int s = 0;
for (int j = 1; i * j <= 500000; ++j) s += cnt[i * j];
if (s >= m) return printf("%lld\n", 1LL * m * i), 0;
}
return 0;
}