题解
1e5的数据,不可能两两gcd
所以只能从因子出发,
埃氏筛
外层从大到小枚举每个因子
内层统计每个含有该因子的数
只要个数达到两个就可以直接输出了
时间复杂度: …?
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N];
int n,m,k;
int main(){
ios::sync_with_stdio(0);
int T,mx;
cin>>T;
for (int cs = 1; cs <= T; ++cs) {
cin>>n;
mx=0;
memset(a, 0, sizeof(a));
for (int i = 1,x; i <= n; ++i) {
cin>>x;
a[x]++;
mx=max(mx,x);
}
//埃氏筛 nlogn
for (int i = mx; i ; --i) {//枚举因子 找最大
int t=0;
for (int j = i; j <=mx ; j+=i) {//统计含有该因子的数
t+=a[j];
if(t>=2){//
printf("Case #%d: %d\n",cs,i );
goto end;
}
}
}
end:;
}
return 0;
}