​https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1179​

数值范围1e6比较小 在可以枚举的范围之内 求个最大值 最大的gcd一定在[1,max]之内 枚举一下 看枚举的i是否有至少两个数是它的倍数

复杂度max+max/2+max/3+...+max/max 复杂度是max再乘一个调和级数 差不多max*logmax

#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;

int book[maxn];
int n;

int main()
{
int i,j,val,maxx,sum;
scanf("%d",&n);
maxx=0;
for(i=1;i<=n;i++)
{
scanf("%d",&val);
book[val]++;
maxx=max(maxx,val);
}
for(i=maxx;i>=1;i--)
{
sum=0;
for(j=i;j<=maxx;j+=i)
{
sum+=book[j];
if(sum>=2) break;
}
if(sum>=2) break;
}
printf("%d\n",i);
return 0;
}