# Kotlin 程序：查找两个数字的 GCD

> 原文： [https://www.programiz.com/kotlin-programming/examples/hcf-gcd](https://www.programiz.com/kotlin-programming/examples/hcf-gcd)

#### 在此程序中，您将学习在 Kotlin 中查找两个数字的 GCD。 这是通过在`if else`语句的帮助下使用`while`循环来完成的。

两个整数的 HCF 或 GCD 是可以完全除以两个数（没有余数）的最大整数。

## 示例 1：使用`while`循环查找两个数字的 GCD

```kt
fun main(args: Array<String>) {
    val n1 = 81
    val n2 = 153
    var gcd = 1

    var i = 1
    while (i <= n1 && i <= n2) {
        // Checks if i is factor of both integers
        if (n1 % i == 0 && n2 % i == 0)
            gcd = i
        ++i
    }

    println("GCD of $n1 and $n2 is $gcd")
}
```

运行该程序时，输出为：

```kt
GCD of 81 and 153 is 9
```

这里，将要找到其 GCD 的两个数字分别存储在`n1`和`n2`中。

然后，执行`while`循环，直到`i`小于`n1`和`n2`为止。 这样，迭代 1 到两个数字中最小的所有数字以找到 GCD。

如果将`n1`和`n2`都除以`i`，则将`gcd`设置为该数字。 一直进行到找到最大数（GCD）为止，该数将`n1`和`n2`均除而无余数。

与 Java 不同，您不能在条件循环中使用`for`循环来解决此问题。 以下是等效的 Java 代码：[查找两个数字的 GCD 的 Java 程序](/java-programming/examples/hcf-gcd)。

* * *

在 Kotlin 中找到 GCD 的更好方法如下：

## 示例 2：找到两个数字的 GCD（更好的替代方法）

```kt
fun main(args: Array<String>) {
    var n1 = 81
    var n2 = 153

    while (n1 != n2) {
        if (n1 > n2)
            n1 -= n2
        else
            n2 -= n1
    }

    println("GCD = $n1")
}
```

运行该程序时，输出为：

```kt
GCD = 9
```

这是查找 GCD 的更好方法。 在此方法中，从较大的整数中减去较小的整数，然后将结果分配给保存较大整数的变量。 继续该过程，直到`n1`和`n2`相等为止。

仅当用户输入正整数时，以上两个程序才能按预期工作。 这是第二个示例的一些修改，可以找到正整数和负整数的 GCD。

* * *

## 示例 3：正数和负数的 GCD

```kt
fun main(args: Array<String>) {
    var n1 = 81
    var n2 = -153

    // Always set to positive
    n1 = if (n1 > 0) n1 else -n1
    n2 = if (n2 > 0) n2 else -n2

    while (n1 != n2) {
        if (n1 > n2)
            n1 -= n2
        else
            n2 -= n1
    }

    println("GCD = $n1")
}
```

运行该程序时，输出为：

```kt
GCD = 9
```