一,基础算法
穷举法,这也是最容易想到的方法。找出两个数a,b中较大的值,将它设为最小公倍数c,如果它可以整除另一个较小的数,那么它就是这两个数的最小公倍数。例如15和3。15是较大的值,而15可以整除3,那么15和3的最小公倍数就是15。
如果不能整除,那么c加一,再次判断c能否同时整除a和b。如果可以,退出循环。如果不能,再次加一,直到找到最小公倍数。
int main()
{
long long a = 0;
long long b = 0;
scanf("%lld %lld", &a, &b);
long long c = (a > b) ? a : b; //将a和b中的较大值存入a中
while (1)
{
if ((c % a == 0) && (c % b == 0))
{
break;
}
c++;
}
printf("%lld", c);
return 0;
}
但是这种方法算法复杂度很高,如果a和b很大,效率很低。
二,改进的算法
以5和7为例,7x1不能整除5, 7x2不能整除5。... 一直到7x5可以整除5,这样就找到了5和7的最小公倍数,为5x7。这个例子中每次跨度为7,比之前的穷举法(每次加一,跨度为1)的算法效率要高。
int main()
{
long long a = 0;
long long b = 0;
scanf("%lld %lld", &a, &b);
long long c = (a > b) ? a : b;
int i = 1;
while (a * i % b)
{
i++;
}
printf("%lld", a*i);
return 0;
}
运行的结果: