辗转相除法求最大公约数

时间:2025-03-09 04:57:04 手机游戏

辗转相除法,也称为欧几里得算法,是一种用于求两个正整数最大公约数的算法。其基本原理如下:

1. 如果 `a` 大于 `b`,则用 `a` 除以 `b` 得到余数 `r`。

2. 如果 `r` 不为 `0`,则将 `b` 赋值给 `a`,将 `r` 赋值给 `b`,然后重复步骤1。

3. 如果 `r` 为 `0`,则 `b` 就是 `a` 和 `b` 的最大公约数。

这个算法基于以下数学定理:

两个整数 `a` 和 `b` 的最大公约数等于 `a` 除以 `b` 的余数 `r` 和 `b` 的最大公约数。

如果 `r` 为 `0`,则 `b` 就是 `a` 和 `b` 的最大公约数。

辗转相除法可以通过迭代或递归实现。以下是使用迭代和递归两种方法实现辗转相除法的示例代码:

迭代实现:

```c

int gcd(int a, int b) {

while (b) {

int temp = b;

b = a % b;

a = temp;

}

return a;

}

```

递归实现:

```c

int gcd(int a, int b) {

if (a % b == 0) {

return b;

} else {

return gcd(b, a % b);

}

}

```

使用这个算法,可以求出任意两个正整数的最大公约数。例如,求 `319` 和 `377` 的最大公约数,可以通过以下步骤:

1. `377 ÷ 319 = 1` 余 `58`

2. `319 ÷ 58 = 5` 余 `29`

3. `58 ÷ 29 = 2` 余 `0`

因此,`319` 和 `377` 的最大公约数是 `29`