题目
题意:
已知正整数a0,a1,b0,b1,设某未知正整x满足gcd(a0,x)==a1,lcm(b0,x)==b1。求满足该条件的x的个数。
思路:
首先要知道gcd(最大公约数)和lcm(最小公倍数)该如何求。
求最大公约数:
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
求最小公倍数:
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
读题可以得出,x是a1的倍数,同时也是b1的因子,所以我们有两种解题方法:在a1的倍数中找b1的因子或在b1的因子中找a1的倍数。这里给出后者的代码。
int main()
{
int t;
cin>>t;
while(t--)
{
int a,b,c,d,sum=0;
cin>>a>>b>>c>>d;
int n=sqrt(d);
for(int i=1;i<=n;i++)
{
if(d%i==0)
{
if(gcd(i,a)==b&&lcm(i,c)==d)
sum++;
if(i*i!=d&&gcd(d/i,a)==b&&lcm(d/i,c)==d)
sum++;
}
}
cout<<sum<<endl;
}
return 0;
}