求最小公倍数的几种方法

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的特殊情况)

posted @ 2022-04-19 18:17  enbug  阅读(951)  评论(0编辑  收藏  举报