#include<stdio.h>
int MaxYin(int a,int b) //求最大公约数辗转相除法
{
int t;
if(a<b)//大数放a中,小数放b中
{
t=a;
a=b;
b=t;
}
while(b!=0&&a%b!=0)//一直除到余数为0
{
t=a%b;
a=b;
b=t;
}
return b;//返回计算结果
}
int main()
{
int num,i,j,a0,a1,b0,b1;
int result=0; //结果
printf("请输入组数:\n");
scanf("%d",&num);
while(num--)
{
printf("请输入a0,a1,b0,b1,且a0能被a1整除,b1能被b0整除。\n");
scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
for(i=1;i*i<b1;i++) //在 1~sqrt(b1)的区间寻找满足条件的数
{
if(b1%i==0)
{
if(i%a1==0&&(MaxYin(i/a1,a0/a1)==1)&&(MaxYin(b1/b0,b1/i)==1)) //满足条件的要求
result++;
j=b1/i;
if(i==j||j%a1!=0)
continue;
if((MaxYin(j/a1,a0/a1)==1)&&(MaxYin(b1/b0,b1/j)==1))
result++;
}
}
printf("满足条件的有%d个\n",result);
result-=result; //清空result的值并继续下一组数据
}
return 0;
}