题目描述 Description
输出描述 Output Description
ps:如有错误,欢迎指正
输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数
条件:
1.P,Q是正整数
2.要求P,Q以x0为最大公约数,以y0为最小公倍数.试求:满足条件的所有可能的两个正整数的个数.
输入描述 Input Description
二个正整数x0,y0输出描述 Output Description
满足条件的所有可能的两个正整数的个数
3 60
4
求最大公约数:
如:求a,b的最大公约数:
c满足 (a-b),b的最大公约数=c
然后再把较大的数减较小的数。直到a == b时最最大公约数了。。。
最小公倍数 a*b/c
c++代码:
</pre><pre name="code" class="cpp">#include <iostream>
using namespace std;
int GetGCD(int num1, int num2) //求最大公约数
{
int m = num1;
int n = num2;
while(m!=n)
{
if(m>n)
{
int temp=m;
m=n;
n=temp;
}
n -= m;
}
return m;
}
int main()
{
int a, b;
cin >> a >> b;
int counts = 0, m, x, g;
if(b % a) //a为b的公约数时
{
<span style="white-space:pre"> </span>cout << 0;
<span style="white-space:pre"> </span>return 0;
}
if(a == 1&& b== 1)
counts=0;
else if(a==1||b==1)
counts=1;
else
{
for (int i = a; i < b; i+= a)
for (int j = i + a; j <= b; j += a)
{
bool flag = false;
g = GetGCD(i,j);
if (g == a)
flag = true;
if (flag == true) //满足i,j为最大公约数为a时,判断最小公倍数是否为b
{
x = 1;
while (x < i)
{
m = j * x;
x++;
if( m % i == 0)
{
if (m != b)
break;
counts++;
}
}
}
}
counts *= 2;
}
cout << counts << endl;
return 0;
}
ps:如有错误,欢迎指正