#include <bits/stdc++.h>
using namespace std;
const int N = 3000000;
int n[3], m[3], s[3];
long long nn, mm, ss;
int prime[N + 1];
vector<pair<int, int> > fs, fn;
vector<long long> bad;
void preprocess() {
  memset(prime, -1, sizeof(prime));
  prime[1] = 1;
  for (int i = 2; i <= N; i++) {
    if (prime[i] != -1) continue;
    prime[i] = i;
    for (long long j = i * 1ll * i; j <= N; j += i)
      if (prime[j] == -1) prime[j] = i;
  }
  return;
}
void read() {
  cin >> n[0] >> n[1] >> n[2] >> m[0] >> m[1] >> m[2] >> s[0] >> s[1] >> s[2];
  nn = n[0] * 1ll * n[1] * 1ll * n[2];
  mm = m[0] * 1ll * m[1] * 1ll * m[2];
  ss = s[0] * 1ll * s[1] * 1ll * s[2];
  return;
}
vector<pair<int, int> > factor(int n[3]) {
  vector<pair<int, int> > ret;
  vector<int> temp;
  for (int i = 0; i < 3; i++) {
    int val = n[i];
    while (prime[val] != val) {
      temp.push_back(prime[val]);
      val = val / prime[val];
    }
    if (val != 1) temp.push_back(val);
  }
  sort(temp.begin(), temp.end());
  int val = temp[0];
  int num = 1;
  for (int i = 1; i < temp.size(); i++) {
    if (temp[i] != val) {
      ret.push_back(make_pair(val, num));
      val = temp[i];
      num = 1;
    } else
      num++;
  }
  ret.push_back(make_pair(val, num));
  return ret;
}
void compute_bad() {
  bad.clear();
  int poss = 0, posn = 0;
  while (posn < fn.size()) {
    if (fs[poss].first < fn[posn].first && poss < fs.size())
      poss++;
    else if (fs[poss].first > fn[posn].first || poss >= fs.size()) {
      bad.push_back(fn[posn].first);
      posn++;
    } else {
      if (fn[posn].second > fs[poss].second) {
        long long temp = 1;
        int first = fs[poss].first;
        int second = fs[poss].second;
        for (int i = 0; i <= second; i++) temp *= first;
        bad.push_back(temp);
      }
      poss++;
      posn++;
    }
  }
  return;
}
long long phase1(int pos, long long val, int sign) {
  if (pos >= bad.size()) return mm / val * ((sign == 1) ? 1 : -1);
  long long ret = 0;
  long long b = bad[pos];
  ret = phase1(pos + 1, val, sign) + phase1(pos + 1, val * b, sign ^ 1);
  return ret;
}
long long phase2(int pos, long long val) {
  if (pos >= fs.size()) {
    return (val <= nn);
  }
  long long ret = 0;
  long long temp = 1;
  for (int i = 0; i <= fs[pos].second; i++) {
    ret += phase2(pos + 1, val * temp);
    temp *= fs[pos].first;
  }
  return ret;
}
int main() {
  int t;
  cin >> t;
  long long ans[t];
  preprocess();
  for (int i = 0; i < t; i++) {
    read();
    fs.clear();
    fn.clear();
    s[0] *= 2;
    fs = factor(s);
    fn = factor(n);
    compute_bad();
    ans[i] = phase2(0, 1) + phase1(0, 1, 1);
  }
  for (int i = 0; i < t; i++) {
    cout << ans[i] << endl;
  }
  return 0;
}
