func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 1000000 + 10;   const int maxa = 10000000 + 10;   const int inf = (-1u) >> 1;   struct disjoint_set {     int p[maxn];     void clear(int sz) {       for (int i = (1); i <= (sz); ++i) {         p[i] = i;       }     }     int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); }     bool join(int x, int y) {       x = find(x), y = find(y);       if (x == y) return false;       p[x] = y;       return true;     }   };   int id[maxa], n;   disjoint_set ds;   bool check(int x, int y) { return id[x] && id[y] && ds.join(id[x], id[y]); }   int gcd(int x, int y) { return y == 0 ? x : gcd(y, x % y); }   int main() {     scanf( %d , &n);     for (int i = (1); i <= (n); ++i) {       int t;       scanf( %d , &t);       id[t] = i;     }     ds.clear(n);     int ans = n;     for (int s = 1; s <= 6000; ++s) {       for (int t = (s & 1) + 1; t < s; t += 2) {         if (gcd(s, t) != 1) continue;         int x = 2 * s * t;         int y = s * s - t * t;         int z = s * s + t * t;         if (x >= maxa || y >= maxa) {           continue;         }         ans -= check(x, y);         if (z < maxa) {           ans -= check(x, z);           ans -= check(y, z);         }       }     }     printf( %d n , ans);     return 0;   }   