题意:求N个数中 取两个数的最大gcd
枚举素数的方法好奇妙。。
没卡n*sqrt(n)
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int vis[111111],a;
int main()
{
int t,cas=1,n;
cin>>t;
while(t--)
{
cin>>n;
int Max=0;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
Max=max(a,Max);
vis[a]++;
}
int ans=1;
for(int i=1;i<=Max;i++)
{
for(int j=i+i;j<=Max;j+=i)
{
vis[i]+=vis[j];
}
}
for(int i=Max;i>=1;i--)
{
if(vis[i]>=2)
{
ans=i;
break;
}
}
printf("Case #%d: %d\n",cas++,ans);
}
return 0;
}