求最小公倍数的几种方法

1、用两数乘积除以最大公约数。

int gcd(int x, int y)
{
	return y?gcd(y,x%y):x;
}
int gcd(int x, int y) //注意:x,y 需大于0 
{
	int t;
	while(y)
	{
		t=x%y;
		x=y;
		y=t;
	}
	return x;
}
int lcm(int x, int y)
{
	return x*y/gcd(x,y);
}

2、扩大法
把大数依次扩大1倍2倍。。。
直到能整除小数,扩大成的这个数就是最大公倍数。

#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
int lcm(int x, int y)
{
	int max=MAX(x,y), min=MIN(x,y);
	for(int i=1;;i++)
	{
		if(!((max*i)%min))
			return max*i;
	}
}

3、如果两数互质,他们的乘积就是最大公倍数。
如何判断两数是否互质。
如果他们的最大公约数为1,他们就互质。
(这其实是方法1的特殊情况。)
如果两个数都是质数,它们互质。
如果两个数中较大的数是质数,它们互质。
如果两个数中较小的数是质数,且小数不能被大数整除,它们是质数。
1与任何数互质。
等等。
4、如果大数是小数的倍数,大数就是最大公倍数。(其实是方法2的特殊情况)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值