显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
const int maxn=5000;
int yz[maxn],su[maxn],num=0,son=0,n,s=0;
void Devide1(int x){
for (int i=1;i<=sqrt(x);++i)
if (x%i==0){
if (i!=1) yz[++son]=i;
if (x/i!=1&&x/i!=i) yz[++son]=x/i;
}
}
int gcd(int a,int b){
if (b==0) return a;
return gcd(b,a%b);
}
int main()
{
freopen("son.in","r",stdin);
freopen("son.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;++i){
int a,a0,b,b0,cnt=0;
scanf("%d %d %d %d",&a,&a0,&b,&b0);
int ans=b0/b;
memset(yz,0,sizeof(yz));
son=0; int pos=1;
Devide1(b);
int g=gcd(ans,b);
int L=ans/g*b;
if ((b%ans||b==ans||b==b0)&&gcd(ans,a)==a0&&L==b0) cnt++;
while (pos<=son){
int Ans=ans*yz[pos]; pos++;
int G=gcd(Ans,a);
if (G!=a0) continue;
int g=gcd(b,Ans);
int L=Ans/g*b;
if ((b%Ans||(b==Ans&&b0==b)||(b==b0))&&L==b0) {
//cout<<Ans<<" "<<ans<<endl;
cnt++;
}
}
printf("%d\n",cnt);
}
//system("pause");
return 0;
}
/*60 4 66 264*/
/*4 2 81 4050*/