#include<bits/stdc++.h> using namespace std; int p[100010]; int p1[1010]; int p2[1010]; bool flag[500010]; const int N=500000; int tot=0; int cnt,cnt2; int res; int m=0; int a0,a1,b0,b1; void init() { for(int i=2;i<=N;i++) { if(!flag[i]) { p[++tot]=i; } for(int j=1;p[j]*i<=N;j++) { flag[p[j]*i]=1; if(i%p[j]==0) break; } } } void work(int num) { int ka0=0,ka1=0,kb0=0,kb1=0; while(a0%num==0) ka0++,a0/=num; while(a1%num==0) ka1++,a1/=num; while(b0%num==0) kb0++,b0/=num; while(b1%num==0) kb1++,b1/=num; if(ka0==ka1&&kb0==kb1) { if(ka1<=kb1) { res*=(kb1-ka1+1); return; } else { res=0; return; } } else if(ka0==ka1&&kb0<kb1) { if(kb1>=ka1) { return; } else { res=0; return; } } else if(kb0==kb1&&ka0>ka1) { if(ka1<=kb1) { return; } else { res=0; return; } } else if(ka0>ka1&&kb0<kb1) { if(ka1==kb1) return; else { res=0; return; } } } int main() { init(); int n; scanf("%d",&n); while(n--) { scanf("%d%d%d%d",&a0,&a1,&b0,&b1); cnt=0,cnt2=0; res=1; int tmpa0=a0,tmpa1=a1,tmpb0=b0,tmpb1=b1; for(int i=1;p[i]*p[i]<=tmpa0;i++) { if(tmpa0%p[i]==0) { p1[++cnt]=p[i]; while(tmpa0%p[i]==0) { tmpa0/=p[i]; } } } if(tmpa0>1) p1[++cnt]=tmpa0; for(int i=1;p[i]*p[i]<=tmpa1;i++) { if(tmpa1%p[i]==0) { p1[++cnt]=p[i]; while(tmpa1%p[i]==0) { tmpa1/=p[i]; } } } if(tmpa1>1) p1[++cnt]=tmpa1; for(int i=1;p[i]*p[i]<=tmpb0;i++) { if(tmpb0%p[i]==0) { p1[++cnt]=p[i]; while(tmpb0%p[i]==0) { tmpb0/=p[i]; } } } if(tmpb0>1) p1[++cnt]=tmpb0; for(int i=1;p[i]*p[i]<=tmpb1;i++) { if(tmpb1%p[i]==0) { p1[++cnt]=p[i]; while(tmpb1%p[i]==0) { tmpb1/=p[i]; } } } if(tmpb1>1) p1[++cnt]=tmpb1; /*for(int i=1;i<=cnt;i++) printf("%d ",p1[i]); printf(" ");*/ sort(p1+1,p1+1+cnt); for(int i=1;i<=cnt;i++) { if(p1[i]!=p1[i-1]) p2[++cnt2]=p1[i]; } /*for(int i=1;i<=cnt2;i++) printf("%d ",p2[i]); printf(" ");*/ for(int i=1;i<=cnt2;i++) { work(p2[i]); } printf("%d ",res); } }