func_code_string: #include <bits/stdc++.h>   using namespace std;   struct rec {     long long w, h, c;   } a[200010] = {0};   int n;   long long ans;   vector<long long> p, sum;   double ABS_dec(double x1, double x2) {     if (x1 < x2) return x2 - x1;     return x1 - x2;   }   void quick_sort(struct rec a[], long h, long e) {     long i = h, j = e;     struct rec val;     val = a[(h + e) / 2];     a[(h + e) / 2] = a[h];     do {       while (i < j && ((val.w < a[j].w) || (val.w == a[j].w && val.h < a[j].h)))         j--;       if (i < j) a[i++] = a[j];       while (i < j && ((val.w > a[i].w) || (val.w == a[i].w && val.h > a[i].h)))         i++;       if (i < j) a[j--] = a[i];     } while (i < j);     a[i] = val;     if (i - 1 > h) quick_sort(a, h, i - 1);     if (i + 1 < e) quick_sort(a, i + 1, e);   }   long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }   void DFS(int i, long long k, long long gh) {     if (i < p.size()) {       int j;       DFS(i + 1, k, gh);       for (j = 1; j <= sum[i]; j++) {         k *= p[i];         DFS(i + 1, k, gh);       }     } else {       k = a[1].c / k;       if (gh % k == 0) ans++;     }   }   bool Is_valid() {     long long i, j, q;     long long gw, gh, k;     double tmp;     gw = gh = a[1].c;     ans = 0;     for (i = 2; i <= n; i++) {       if (a[i].w != a[i - 1].w)         break;       else         gw = gcd(gw, a[i].c);     }     if (i <= n) {       q = i - 1;       if (n % q) return false;       i = 1;       while (i + q <= n) {         if (a[i].w == a[i + q].w || a[i].h != a[i + q].h) return false;         gh = gcd(gh, a[i + q].c);         for (j = i + 1; j < i + q; j++) {           if (a[j + q].w != a[j + q - 1].w) return false;           if (a[j + q].h != a[j].h) return false;           if (ABS_dec((double)a[j].c / a[j - 1].c,                       (double)a[j + q].c / a[j + q - 1].c) > 0.0000001)             return false;         }         i += q;       }     }     k = gw;     for (i = 2; i <= sqrt(k); i++)       if (k % i == 0) {         p.push_back(i);         sum.push_back(0);         while (k % i == 0) k /= i, sum[sum.size() - 1]++;       }     if (k > 1) p.push_back(k), sum.push_back(1);     DFS(0, 1, gh);     return true;   }   int main() {     int i, j, k;     bool isYES = true;     scanf( %d , &n);     for (i = 1; i <= n; i++) {       scanf( %I64d %I64d %I64d , &a[i].w, &a[i].h, &a[i].c);     }     quick_sort(a, 1, n);     Is_valid();     printf( %I64d , ans);   }   