#include <bits/stdc++.h>
using namespace std;
const long long Maxn = 200010;
long long w[Maxn], h[Maxn], c[Maxn];
long long a[Maxn], al, b[Maxn], bl;
long long n;
long long d[Maxn], t[Maxn];
long long gcd(long long A, long long B) { return A == 0 ? B : gcd(B % A, A); }
int main() {
  long long i, j, k;
  scanf("%I64d", &n);
  for (i = 1; i <= n; i++)
    scanf("%I64d%I64d%I64d", &w[i], &h[i], &c[i]), a[i] = w[i], b[i] = h[i];
  sort(a + 1, a + n + 1);
  al = unique(a + 1, a + n + 1) - (a + 1);
  sort(b + 1, b + n + 1);
  bl = unique(b + 1, b + n + 1) - (b + 1);
  if (al * bl != n) {
    printf("0\n");
    return 0;
  }
  for (i = 1; i <= n; i++) {
    w[i] = lower_bound(a + 1, a + al + 1, w[i]) - a;
    h[i] = lower_bound(b + 1, b + bl + 1, h[i]) - b;
    if (!d[w[i]])
      d[w[i]] = c[i];
    else
      d[w[i]] = gcd(d[w[i]], c[i]);
  }
  for (i = 1; i <= n; i++) c[i] /= d[w[i]];
  bool bk = true;
  for (i = 1; i <= n; i++) {
    if (!t[h[i]])
      t[h[i]] = c[i];
    else if (t[h[i]] != c[i]) {
      bk = false;
      break;
    }
  }
  if (bk == false) {
    printf("0\n");
    return 0;
  }
  long long p = d[1];
  for (i = 2; i <= al; i++) p = gcd(p, d[i]);
  long long ans = 0;
  for (i = 1; i * i <= p; i++) {
    if (p % i == 0) {
      ans++;
      if (i * i != p) ans++;
    }
  }
  printf("%I64d\n", ans);
  return 0;
}
