第四题:
int gcd(int a, int b) {
if (a < b)
swap(a, b);
if (a % b == 0)
return b;
else
return gcd(b, a % b);
}
int main() {
int n;
cin >> n;
vector<int> candy(n);
for (int i = 0; i < n; i++)
cin >> candy[i];
vector<vector<int>> neigh(n);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (gcd(candy[i], candy[j]) > 1) {
neigh[i].push_back(j);
neigh[j].push_back(i);
}
}
}
vector<bool> flag(n, false);
int res = 0;
for (int i = 0; i < n; i++) {
if (flag[i] == false) {
int sum = 0;
queue<int> q;
q.push(i);
flag[i] = true;
while (!q.empty()) {
int cur = q.front();
sum++;
q.pop();
for (int j = 0; j < neigh[cur].size(); j++) {
if (flag[neigh[cur][j]] == false) {
q.push(neigh[cur][j]);
flag[neigh[cur][j]] = true;
}
}
}
res = max(res, sum);
}
}
cout << res << endl;
system("pause");
return 0;
}