【题目描述】
二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求满足下列条件的P,Q的个数。
条件:
1.P,Q是正整数;
2.要求P,Q以x0为最大公约数,以y0为最小公倍数。
试求:满足条件的所有可能的两个正整数的个数。
【输入】
输入x0和y0
【输出】
满足条件的所有可能的两个正整数的个数
【输入样例】
3 60
【输出样例】
4
【提示】
样例说明:此时的P Q分别为:
3 60
15 12
12 15
60 3
这个直接暴力找是会超时的,所以要用辗转相除。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int gy(int x,int y)
{
if(x==0) return y;
return gy(y%x,x);
}
int main()
{
long long x,y,t,s=0;
cin>>x>>y;
for(long long i=x;i<=sqrt(x*y);i++)
{
if(i%x==0&&y%i==0)
{
t=(x*y)/i;
if(gy(t,i)==x)
{
if(i==t) s++;
else s+=2;
}
}
}
cout<<s;
return 0;
}