const
n=2000000000;
q=trunc(sqrt(n));
p=4648;
var
i,j,s,a0,a1,b0,b1:longint;
m,y,m1:integer;
judge:boolean;
d:array[1..p,1..4]of 1..31;
e:array[1..4]of longint;
c:array[1..q]of integer;
b:array[1..q]of boolean;
a:array[1..p]of longint;
procedure fenjie(x:longint);//把一个数分解成sqrt(2000000000)以内的质因子
var
i:longint;
begin
if x=1 then exit;
if x>q then
for i:=1 to p do
if x mod a[i]=0 then
begin
inc(d[i,y]);
fenjie(x div a[i]);
exit;
end else
else if x=a[c[x]] then
begin
inc(d[x,y]);
exit;
end else
for i:=1 to c[x] do
if x mod a[i]=0 then
begin
inc(d[i,y]);
fenjie(x div a[i]);
exit;
end;
e[y]:=x;
end;
begin
fillchar(b,sizeof(b),true);//用筛法找出sqrt(2000000000)以内的质因子
for i:=2 to q do
if b[i] then
begin
for j:=i+1 to q do
if b[j] then
if j mod i=0 then b[j]:=false;
end;
j:=0;
for i:=2 to q do
begin
if b[i] then
begin
inc(j);
a[j]:=i;
end;
c[i]:=j;
end;
readln(m);
for m1:=1 to m do//每步程序主体
begin
judge:=false;
fillchar(d,sizeof(d),0);
fillchar(e,sizeof(e),0);
read(a0);read(a1);read(b0);readln(b1);
if b1 mod a1 >0 then begin writeln(0); continue; end;
y:=1;fenjie(a0);
y:=2;fenjie(a1);
y:=3;fenjie(b0);
y:=4;fenjie(b1);
s:=1;
if (e[2]=0)and(e[3]=e[4])and(e[3]>0)and(e[1]<>e[3]) then s:=2;
for i:=1 to p do
if (d[i,1]>d[i,2])and(d[i,3]<d[i,4])and(d[i,4]>d[i,2]) then
begin writeln(0); judge:=true; break; end else
if (d[i,1]=d[i,2])and(d[i,3]=d[i,4]) then
s:=s*(d[i,4]-d[i,2]+1);
if judge then continue;
writeln(s);
end;
end.
//每次只过前2点,后面总是算多.