#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N(35),N2(45009);
struct factor{
int n;int num;
};
bool prime[N2]={false};
int pri[N2]={0};
factor B1[N];
void init()
{
fill(prime,prime+N2,true);
for(int i=2;i<=45000;i++)
if(prime[i])
for(int j=2;i*j<=45000;j++)
prime[i*j]=false;
for(int i=2;i<=45000;i++)
if(prime[i])
{
pri[0]++;
pri[pri[0]]=i;
}
}
int trans(int x,factor *t)
{
t[0].n=0;
for(int i=1;i<=pri[0];i++)
if(x%pri[i]==0)
{
t[0].n++;
t[t[0].n].n=pri[i];
t[t[0].n].num=1;
x/=pri[i];
while(x%pri[i]==0)
{
t[t[0].n].num++;
x/=pri[i];
}
}
if(x>1)
{
t[0].n++;
t[t[0].n].n=x;
t[t[0].n].num=1;
}
}
int ind(int x,int fac)
{
int num(0);
while(x%fac==0)
{
x/=fac;
num++;
}
return num;
}
int main()
{
int n,a0,a1,b0,b1;
init();
cin>>n;
for(int z=0;z<n;z++)
{
int ans(1);
cin>>a0>>a1>>b0>>b1;
trans(b1,B1);
// for (int j=1;j<=B1[0].n;j++)
// cout<<B1[j].n<<" "<<B1[j].num<<endl;
for(int i=1;i<=B1[0].n;i++)
{
int fac(B1[i].n);
int pa0(ind(a0,fac)),pa1(ind(a1,fac)),
pb0(ind(b0,fac)),pb1(B1[i].num);
//cout<<pa0<<" "<<pa1<<" "<<pb0<<" "<<pb1<<endl;
if(pa0==pa1)
{
if(pb0==pb1) ans*=pb1-pa1+1;
if(pb0<pb1&&pa0>pb1) {ans=0;break;}
}
else
{
if(pb0<pb1&&pa1!=pb1) {ans=0;break;}
if(pb0==pb1&&pa1>pb1) {ans=0;break;}
}
}
cout<<ans<<endl;
}
return 0;
}
/**************************************************************
Problem: 2289
User: admin
Language: C++
Result: Accepted
Time:311 ms
Memory:2296 kb
****************************************************************/