func_code_string: #include <bits/stdc++.h>   using namespace std;   int i, j, k, s, t;   int read() {     int x = 0;     char ch = getchar();     while (ch <  0  || ch >  9 ) ch = getchar();     while (ch >=  0  && ch <=  9 ) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     return x;   }   int n1, n2, n3, p1, p2, p3, m1, m2, m3, st;   long long m, n, ans;   int st2[1010000], sta[1010000];   struct data {     int p, q;   };   bool cmp(const data &a, const data &b) { return a.p < b.p; }   struct da {     data a[50];     int n;   } a, b;   long long qpow(long long x, int y) {     long long ans = 1;     while (y) {       if (y & 1) ans *= x;       x *= x;       y >>= 1;     }     return ans;   }   void solve1(int x, long long y) {     if (y > n) return;     if (x == b.n + 1) {       ans++;       return;     }     solve1(x + 1, y);     for (int i = 1; i <= b.a[x].q; i++) y *= b.a[x].p, solve1(x + 1, y);   }   void solve2(int x, long long y, int f) {     if (!y) return;     if (x == st + 1) {       ans += y * f;       return;     }     solve2(x + 1, y, f);     for (int i = 1; i <= st2[x]; i++) y /= sta[x];     solve2(x + 1, y, -f);   }   void pre(da &a, int x) {     int i, j, k;     for (i = 1; i <= a.n; i++)       while (x % a.a[i].p == 0) x /= a.a[i].p, a.a[i].q++;     for (i = 2; i * i <= x; i++)       if (x % i == 0) {         a.n++;         a.a[a.n].p = i;         a.a[a.n].q = 0;         while (x % i == 0) x /= i, a.a[a.n].q++;       }     if (x > 1) {       a.n++;       a.a[a.n].p = x;       a.a[a.n].q = 1;     }   }   int main() {     int T = read();     while (T--) {       n1 = read();       n2 = read();       n3 = read();       n = (long long)n1 * n2 * n3;       m1 = read();       m2 = read();       m3 = read();       m = (long long)m1 * m2 * m3;       p1 = read();       p2 = read();       p3 = read();       a.n = 0;       b.n = 0;       ans = 0;       pre(a, n1);       pre(a, n2);       pre(a, n3);       pre(b, p1);       pre(b, p2);       pre(b, p3);       pre(b, 2);       sort(a.a + 1, a.a + a.n + 1, cmp);       sort(b.a + 1, b.a + b.n + 1, cmp);       solve1(1, 1);       j = 1;       st = 0;       for (i = 1; i <= a.n; i++) {         while (b.a[j].p < a.a[i].p && j <= b.n) j++;         if (j == b.n + 1) break;         if (b.a[j].p == a.a[i].p && a.a[i].q > b.a[j].q) {           sta[++st] = a.a[i].p;           st2[st] = b.a[j].q + 1;         }         if (b.a[j].p > a.a[i].p) {           sta[++st] = a.a[i].p;           st2[st] = 1;         }       }       for (; i <= a.n; i++) {         sta[++st] = a.a[i].p;         st2[st] = 1;       }       solve2(1, m, 1);       cout << ans << endl;     }   }   