题目:
已知正整数 a0,a1,b0,b1,设某未知正整数 x 满足:
1. x 和 a0 的最大公约数是 a1 2. x 和 b0 的最小公倍数是 b1
求解满足条件的 x 的个数。请你帮助他编程求解这个问题。
对于 100%的数据,保证有 1≤a0,a1,b0,b1≤2,000,000,000。
输入格式:
第一行为一个正整数 n,表示有 n 组输入数据。n≤2000
接下来的 n 行每行一组输入数据,为四个正整数 a0,a1,b0,b1,之间用一个空格隔开。
输出格式:
共n 行。每组输入数据的输出结果占一行,为一个整数。 对于每组数据:若不存在这样的 x,请输出 0; 若存在这样的 x,请输出满足条件的 x 的个数;
代码:
#include
int gcd(int a,int b)
{
if(a%b==0)
return b;
else
return gcd(b,a%b);
}
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
int main()
{
int N,count = 0;
scanf("%d",&N);
int a0,a1,b0,b1;
for(int i = 1;i <= N;i++)
{
scanf("%d %d %d %d",&a0,&a1,&b0,&b1);
for(int j = 1;j <= b1 / a1;j++)
{
if(gcd(j,a0/a1) == 1)
{
if(lcm(j*a1,b0) == b1)
count++;
}
}
printf("%d\n",count);
count = 0;
}
}