显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int vis[50005],n,a0,a1,b0,b1;
vector<int>pls;
void get_p(){
for(int i=2;i<=50000;i++){
if(!vis[i])
pls.push_back(i);
for(int j=0;j<pls.size()&&pls[j]*i<=n;j++){
vis[pls[j]*i]=1;
if(i%pls[j]==0)
break;
}
}
}
int in(){
int a=0;
char ch=getchar();
while(!('0'<=ch&&'9'>=ch))ch=getchar();
while('0'<=ch&&'9'>=ch){
a=(a<<3)+(a<<1)+(ch^'0');
ch=getchar();
}
return a;
}
int main()
{
freopen("son.in","r",stdin);
freopen("son.out","w",stdout);
// freopen("1.txt","r",stdin);
scanf("%d",&n);
get_p();
while(n--){
int cnt=1;
a0=in();
a1=in();
b0=in();
b1=in();
for(int i=0;i<pls.size();i++){
int x=pls[i];
if(b1%x)continue;
int cnt1=0;
while(a0%x==0){
cnt1++;
a0/=x;
}
int cnt2=0;
while(a1%x==0){
cnt2++;
a1/=x;
}
int cnt3=0;
while(b0%x==0){
cnt3++;
b0/=x;
}
int cnt4=0;
while(b1%x==0){
cnt4++;
b1/=x;
}
if(cnt1==cnt2&&cnt3==cnt4)//可以在一个区间中选
cnt*=(cnt3-cnt1+1);
else if(cnt1==cnt2){//必须选一个值,但是另一个范围不允许,下面同理
if(cnt2>cnt4){
cnt=0;
break;
}
}
else if(cnt3==cnt4){
if(cnt2>cnt4){
cnt=0;
break;
}
}
else if(cnt1>cnt2&&cnt3<cnt4){
if(cnt2!=cnt4){
cnt=0;
break;
}
}
}
if(b1>1&&b0>1&&a1!=b1&&a0%b1) cnt*=2;
cout<<cnt<<endl;
}
return 0;
}