Lowest Common Multiple(LCM)
这是数论算法中的基础算法程序。
基于非递归的欧几里得算法(计算最大公约数GCD算法)来求解最小公倍数。
/*
* 计算最小公倍数(Lowest Common Multiple,LCM)
* 需要用到计算最大公约数的函数
*
* 两个数的乘积等于这两个数的最大公约数与最小公倍数的积。
* 即(a, b)×[a, b]=a×b。
* (a, b)表示a和b的最大公约数,[a, b]表示a和b的最小公倍数。
*
*/
#include <stdio.h>
long gcd(long m, long n)
{
for(;;) {
if(n == 0)
return m;
long temp = m % n;
m = n;
n = temp;
}
}
long lcm(long a, long b)
{
// return a * b / gcd(a, b);
return a / gcd(a, b) * b;
}
int main(void)
{
printf("a=%d, b=%d, lcm=%ld\n", 18, 20, lcm(18, 20));
printf("a=%d, b=%d, lcm=%ld\n", 15, 90, lcm(15, 90));
return 0;
}
关键代码:
long gcd(long m, long n)
{
for(;;) {
if(n == 0)
return m;
long temp = m % n;
m = n;
n = temp;
}
}
long lcm(long a, long b)
{
// return a * b / gcd(a, b);
return a / gcd(a, b) * b;
}