#include<cstdio>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int prime[100001],n,size;
bool notprime[100001];
ll ans,a1,b1,a0,b0,numa0,numb0,numa1,numb1,la,ra,lb,rb,l,r;
void init(){
notprime[1]=true;
for(int i=2;i<=50000;i++){
if(!notprime[i])
prime[++size]=i;
for(int j=1,k;j<=size;j++){
k=i*prime[j];
if(k>50000)break;
notprime[k]=true;
if(i%prime[j]==0)break;
}
}
}
int main(){
init();
scanf("%d",&n);
while(n--){
ans=1;bool ok=true;
scanf("%lld%lld%lld%lld",&a0,&a1,&b0,&b1);
if(a1>a0||b1<b0){
printf("0\n");
continue;
}
for(int i=1;i<=size;i++){
if(a0==1&&a1==1&&b0==1&&b1==1)break;
numa0=numb0=numa1=numb1=0;la=lb=l=0,ra=rb=r=1000000;
while(a0%prime[i]==0){a0/=prime[i];numa0++;}
while(b0%prime[i]==0){b0/=prime[i];numb0++;}
while(a1%prime[i]==0){a1/=prime[i];numa1++;}
while(b1%prime[i]==0){b1/=prime[i];numb1++;}
if(numa0<numa1||numb0>numb1){ ok=false;break; }
la=numa1; rb=numb1;
if(numa0>numa1) ra=numa1;
if(numb0<numb1) lb=numb1;
l=max(la,lb);r=min(ra,rb);
if(r<l){ ok=false;break;}
ans=(ll)ans*(r-l+1);
}
if(!(a0==1&&a1==1&&b0==1&&b1==1)){
la=lb=l=0,ra=rb=r=1000000;
if(a1>a0||b1<b0)ok=false;
if(a1==a0&&a1!=1) ans<<=1;
if(b1==b0&&b1!=1) ans<<=1;
}
if(!ok) ans=0;
printf("%lld\n",ans);
}
return 0;
}