bzoj2257
裴蜀定理
有这样一个定理,ax+by能凑出最小的正整数=gcd(a,b),那么这里正好符合我们要求的东西,先开始我还想不明白6和4是怎么配出2的
然后我们就把每个数质因数分解,最多sqrt(n)个,放到一个map里统计次数,如果一个因子出现次数大于等于k就和他取max,最后就是答案
#include<bits/stdc++.h> using namespace std; int n, k, ans; map<int, int> mp; int main() { cin >> n >> k; for(int i = 1; i <= n; ++i) { int x; scanf("%d", &x); for(int j = 1; j * j <= x; ++j) if(x % j == 0) { ++mp[j]; if(mp[j] == k) ans = max(ans, j); if(j * j != x) { ++mp[x / j]; if(mp[x / j] == k) ans = max(ans, x / j); } } } printf("%d\n", ans); return 0; }