求最小公倍数的几种方法
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的特殊情况)