P1131 最小公倍数和最大公约数问题

描述

输入二个正整数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即为最大公约数


求最小公倍数算法:

最小公倍数=两整数的乘积÷最大公约数

#include
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;
}

你可能感兴趣的:(Vijos,最小公倍数和最大公约数问题)