题意:给一堆数,选出个数最多的数的集合。使得集合内所有数的最大公因子不为1。
解法:枚举含有每个因子的数的个数,以及相同的数的个数,两者取最大值即可。此题 1 1 答案为1,5 1 1 1 1 1 答案为1,可以拿来hack。
#include <bits/stdc++.h>
using namespace std;
const int maxn=100005;
int n,cnt[maxn],t,res;
int main()
{
scanf("%d",&n);
for (int i=0;i<n;++i) {
scanf("%d",&t);
int j=1;
for (;j*j<t;++j)
if (t%j==0) {
++cnt[j];
++cnt[t/j];
}
if (j*j==t)
++cnt[j];
}
res=1;
for (int i=2;i<maxn;++i)
res=max(res,cnt[i]);
printf("%d\n",res);
return 0;
}