原题
题目大意
给出一段数,这些数字是两个数的所有因数,找回这两个数
题目分析
简单分析一下可以发现最大的数一定是其中一个答案(花了10min意识到),然后就很简单了,去掉一个数的所有因子,剩下最大的那个数就是答案2了。
这里用最简单的桶来做(其实不排序好像也行)
代码
#include<cstdio>
#include<cstring>
#define max(a,b) (a > b ? a : b)
int ori[10010],test[10010];
int maxt = 0,ans1,ans2;
int main()
{
int n;
scanf("%d",&n);
memset(ori,0,sizeof(ori));
memset(test,0,sizeof(test));
for (int i = 0;i < n;i++)
{
int t;
scanf("%d",&t);
ori[t]++;
maxt = max(maxt,t);
}
ans1 = maxt;
for (int i = 1;i <= maxt / 2;i++)
if (maxt % i == 0) ori[i]--;
ori[maxt]--;
for (int i = maxt;i > 0;i--)
{
if (ori[i])
{
maxt = i;
break;
}
}
ans2 = maxt;
printf("%d %d\n",ans1,ans2);
return 0;
}