题目大意:
有n个数,选出k个数,使得这k个数的最大公约数 * k最大
解题思路:
从大到小枚举一个数i,然后枚举i的倍数,如果在n个数中有k个或以上的i的倍数,i*k就是答案
A c c e p t e d c o d e : Accepted\ code: Accepted code:
#include<cstdio>
#include<algorithm>
using namespace std;
int n, k, maxn;
int a[500005];
int main() {
scanf("%d %d", &n, &k);
for (int x, i = 1; i <= n; ++i)
scanf("%d", &x), ++a[x], maxn = max(maxn, x);
for (int sum, i = maxn; i >= 1; --i) {
sum = 0;
for (int j = i; j <= maxn; j += i) {
sum += a[j];
if (sum >= k) return printf("%lld", (long long)i * k) & 0;
}
}
}