在C语言中,求两个数的最小公倍数(LCM)有多种方法。以下是一些常见的方法及其代码示例:
使用辗转相除法求最大公约数,然后计算最小公倍数
辗转相除法(Euclidean algorithm)是一种求最大公约数(GCD)的算法,公式为 `gcd(a, b) = gcd(b, a % b)`,直到 `b` 为 0 时,`a` 即为最大公约数。最小公倍数可以通过公式 `lcm(a, b) = (a * b) / gcd(a, b)` 计算得到。
```c
include
// 求最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 求最小公倍数
int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
int main() {
int num1, num2;
printf("请输入两个正整数: ");
scanf("%d %d", &num1, &num2);
int result = lcm(num1, num2);
printf("最小公倍数为: %d\n", result);
return 0;
}
```
使用穷举法
穷举法是通过遍历所有可能的公倍数,直到找到最小的那个。这种方法虽然简单,但效率较低,尤其是当数值较大时。
```c
include
int lcm(int a, int b) {
int max = (a > b) ? a : b;
int lcm = max;
while (1) {
if (lcm % a == 0 && lcm % b == 0) {
break;
}
lcm += max;
}
return lcm;
}
int main() {
int num1, num2;
printf("请输入两个正整数: ");
scanf("%d %d", &num1, &num2);
int result = lcm(num1, num2);
printf("最小公倍数为: %d\n", result);
return 0;
}
```
使用循环和条件语句
这种方法类似于穷举法,但通过循环和条件语句来实现,效率略高一些。
```c
include
int findLCM(int num1, int num2) {
int max, lcm;
max = (num1 > num2) ? num1 : num2;
lcm = max;
while (1) {
if (max % num1 == 0 && max % num2 == 0) {
lcm = max;
break;
}
max++;
}
return lcm;
}
int main() {
int num1, num2, lcm;
printf("请输入两个正整数: ");
scanf("%d %d", &num1, &num2);
lcm = findLCM(num1, num2);
printf("最小公倍数为: %d\n", lcm);
return 0;
}
```
使用相减法求最大公约数
这种方法通过不断相减两个数,直到它们相等,得到的数即为最大公约数。然后通过公式计算最小公倍数。