最大公约数和最小公倍数

求x,y两个数的最大公约数和最小公倍数

最大公约数

我看到这个题,想到的是穷举法,先选出两者之间最小的那个数作为上界,从这个最小值开始递减,如果x 与 y都可以整除的第一个数,就为最大公约数。代码如下:

#include <iostream>
using namespace std;

//两数的乘积等于最小公倍数与最大公约数的乘积
int main()
{
	int x, y, min, i;		
	cin >> x >> y;
	min = x;
	if (x > y)
	{
		min = y;
	}

	for (i = min; i >= 1; i--)
	{
		if (x % i == 0 && y % i == 0)
		{
			break;
		}
	}
	cout << i << endl;
	return 0;
}

后来想起以前有学过一个辗转相除法(欧几里德算法),其原理为:GCD(x , y)=GCD(x , y - x), x > y,即:GCD(x , y)=GCD(y, x mod y) , x > y

#include <iostream>
using namespace std; 
int main()
{
	int a, b, c;
	cin >> a >> b;
	while(b)
	{
		c = a % b;
		a = b;
		b = c;
	}
	cout << a << endl;
	return 0;

当然也可以把写成GCD函数

int gcd(int a,int b)
{
	return b ? gcd(b , a % b) : a;
}

最小公倍数

只需要先求出最大公约数,用两个数的乘积除以最大公约数即为最小公倍数。

#include <iostream>
using namespace std;
int gcd(int a,int b)
{
	return b ? gcd(b , a % b) : a;
}
int main()
{
	int x, y, z, l, mul;
	cin >> x >> y;
	mul = x * y;
	l = gcd(x, y);
	z = mul / l;
	cout << z << endl;
	return 0;
革命尚未成功,同志仍需努力。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值