第四题AC70%
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn = 2e5+5;
int arr[maxn];
int root[maxn];
int num[maxn];
int gcd(int a, int b){
return b == 0? a: gcd(b, a%b);
}
int find(int x){
if(x == root[x]) return x;
int t = find(root[x]);
root[x] = t;
return t;
}
int main(){
int n, x;
cin>>n;
for(int i = 0; i < maxn; i++){
root[i] = i;
num[i] = 1;
}
for(int i = 0; i < n; i++){
cin >> arr[i];
if(i==0) continue;
for(int j = 0; j < i; j++){
if(gcd(arr[i], arr[j]) != 1){
int a = find(i);
int b = find(j);
if(a != b){
root[b] = a;
num[a] += num[b];
}
}
}
}
int m = 0;
for(int i = 0; i < n; i++){
if(num[i] > num[m]) m = i;
}
cout<<num[m]<<endl;
return 0 ;
}