#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
const long long MOD = 1000000007;
const int INF = 1000000007;
const long long LINF = 1LL * INF * INF;
const int MAXN = 5047;
const double EPS = 1e-6;
const double PI = acos(-1.0);
long long nd[3], n, md[3], m, sd[3], ans;
unordered_map<int, int> n_can, s_can;
vector<pair<int, int> > PS;
void rec(int pos, long long cur) {
  if (pos == (int)((PS).size())) {
    ans += cur <= n;
    return;
  }
  for (int i = (0); i < (PS[pos].second + 1); ++i) {
    rec(pos + 1, cur);
    cur *= PS[pos].first;
  }
}
void solve() {
  ans = 0;
  n_can.clear();
  s_can.clear();
  PS.clear();
  vector<long long> A;
  for (int i = (0); i < (3); ++i) cin >> nd[i];
  for (int i = (0); i < (3); ++i) cin >> md[i];
  for (int i = (0); i < (3); ++i) cin >> sd[i];
  sd[0] *= 2;
  n = nd[0] * nd[1] * nd[2];
  m = md[0] * md[1] * md[2];
  for (int i = (0); i < (3); ++i) {
    for (int p = 2; p * p <= nd[i]; p++) {
      if (nd[i] % p == 0) {
        int al = 0;
        long long cur = 1;
        while (nd[i] % (cur * p) == 0) {
          cur *= p;
          ++al;
        }
        n_can[p] += al;
        nd[i] /= cur;
      }
    }
    if (nd[i] > 1) n_can[nd[i]]++;
  }
  for (int i = (0); i < (3); ++i) {
    for (int p = 2; p * p <= sd[i]; p++) {
      if (sd[i] % p == 0) {
        int al = 0;
        long long cur = 1;
        while (sd[i] % (cur * p) == 0) {
          cur *= p;
          ++al;
        }
        s_can[p] += al;
        sd[i] /= cur;
      }
    }
    if (sd[i] > 1) s_can[sd[i]]++;
  }
  for (pair<int, int> p : s_can) PS.push_back(p);
  rec(0, 1);
  for (pair<int, int> p : n_can) {
    long long cur = 1, al = s_can[p.first];
    if (p.second > al) {
      for (int i = (0); i < (al); ++i) cur *= p.first;
      if (cur < LINF / p.first) A.push_back(cur * p.first);
    }
  }
  for (int mask = (0); mask < (1 << (int)((A).size())); ++mask) {
    int cnt = 0;
    long long cur = 1;
    for (int i = (0); i < ((int)((A).size())); ++i) {
      if (!(mask & (1 << i))) continue;
      ++cnt;
      cur *= A[i];
    }
    if (cnt & 1)
      ans -= m / cur;
    else
      ans += m / cur;
  }
  cout << ans << '\n';
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  int t;
  cin >> t;
  while (t--) solve();
  return 0;
}
