# C 程序：查找两个数字的 LCM

> 原文： [https://www.programiz.com/c-programming/examples/lcm](https://www.programiz.com/c-programming/examples/lcm)

#### 在此示例中，您将学习如何计算用户输入的两个数字的 LCM（最小公倍数）。

要理解此示例，您应该了解以下 [C 编程](/c-programming "C tutorial")主题：

*   [C 编程运算符](/c-programming/c-operators)
*   [C `if...else`语句](/c-programming/c-if-else-statement)
*   [C `while`和`do...while`循环](/c-programming/c-do-while-loops)

* * *

两个整数`n1`和`n2`的 LCM 是可被`n1`和`n2`完全除尽的最小正整数。 ）。 例如，LCM 为 72 和 120 为 360。

* * *

## LCM 使用`while`和`if`

```c
#include <stdio.h>
int main() {
    int n1, n2, min;
    printf("Enter two positive integers: ");
    scanf("%d %d", &n1, &n2);

    // maximum number between n1 and n2 is stored in min
    min = (n1 > n2) ? n1 : n2;

    while (1) {
        if (min % n1 == 0 && min % n2 == 0) {
            printf("The LCM of %d and %d is %d.", n1, n2, min);
            break;
        }
        ++min;
    }
    return 0;
} 
```

**输出**

```c
Enter two positive integers: 72
120
The LCM of 72 and 120 is 360. 
```

在该程序中，用户输入的整数分别存储在变量`n1`和`n2`中。

`min`中存储了`n1`和`n2`中最大的数目。 两个数字的 LCM 不能小于`min`。

`while`循环的测试表达式始终为`true`。

在每次迭代中，检查`min`是否可被`n1`和`n2`完全整除。

```c
if (min % n1 == 0 && min % n2 == 0) { ... }

```

如果此测试条件不成立，则将`min`递增`1`，并且迭代将继续进行，直到`if`语句的测试表达式为`true`。

也可以使用以下公式找到两个数字的 LCM：

```c
LCM = (num1*num2)/GCD

```

了解如何在 C 编程中找到[两个数字的 GCD](https://www.programiz.com/c-programming/examples/hcf-gcd)。

* * *

## 使用 GCD 计算 LCM

```c
#include <stdio.h>
int main() {
    int n1, n2, i, gcd, lcm;
    printf("Enter two positive integers: ");
    scanf("%d %d", &n1, &n2);

    for (i = 1; i <= n1 && i <= n2; ++i) {

        // check if i is a factor of both integers
        if (n1 % i == 0 && n2 % i == 0)
            gcd = i;
    }

    lcm = (n1 * n2) / gcd;

    printf("The LCM of two numbers %d and %d is %d.", n1, n2, lcm);
    return 0;
} 
```

**输出**

```c
Enter two positive integers: 72
120
The LCM of two numbers 72 and 120 is 360. 
```