描述
输入二个正整数x0,y0(2≤x0≤100000,2≤y0≤1000000),求出满足下列条件的P、Q的个数。
条件:1.P、Q是正整数
2.要求P、Q以xO为最大公约数,以yO为最小公倍数。
试求,满足条件的所有可能的两个正整数的个数。
格式
输入格式
两个正整数
输出格式
满足条件的所有可能的两个正整数的个数
样例1
样例输入1
3 60
样例输出1
4
求最大公约数算法:
辗转相除法
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
辗转相除法
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
求最小公倍数算法:
最小公倍数=两整数的乘积÷最大公约数
最小公倍数=两整数的乘积÷最大公约数
#include<iostream>
using namespace std;
int gcd(int a, int b)//不用管a,b大小关系
{
int c = a%b;
while (c)
{
a = b;
b = c;
c = a%b;
}
return b;
}
int lcm(int a, int b)
{
return a*b / gcd(a, b);
}
int main()
{
int x0, y0,num;
while (cin >> x0 >> y0)
{
num = 0;
for (int p = x0; p <= y0;p++)
for (int q = x0; q <= y0; q++)
{
if (gcd(p, q) == x0&&lcm(p, q) == y0)
num++;
}
cout << num << endl;
}
return 0;
}