pta题目最大公约数和最小公倍数
时间: 2025-06-30 13:10:08 AIGC 浏览: 32
最大公约数(GCD)和最小公倍数(LCM)的计算在编程中是非常常见的任务,尤其在处理数学问题时。以下将介绍几种实现这些功能的方法,包括欧几里得算法及其扩展形式。
### 欧几里得算法
欧几里得算法是一种高效的方法来找出两个数的最大公约数。该算法的基本原理是通过重复的除法操作,直到余数为零。具体步骤如下:
- 给定两个正整数 $a$ 和 $b$,其中 $a > b$。
- 计算 $r = a \mod b$。
- 如果 $r = 0$,则 $b$ 就是最大公约数。
- 否则,令 $a = b$ 和 $b = r$,然后回到第二步继续执行。
这种方法可以很容易地用递归或者循环的方式实现[^1]。
#### Python 实现
```python
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
```
#### C语言 实现
```c
#include <stdio.h>
int gcd(int m, int n) {
while (n != 0) {
int t = m % n;
m = n;
n = t;
}
return m;
}
int main() {
int m, n;
printf("请输入两个整数:");
scanf("%d %d", &m, &n);
int result = gcd(m, n);
printf("最大公约数是:%d\n", result);
// 最小公倍数可以通过两数乘积除以最大公约数得到
printf("最小公倍数是:%d\n", m * n / result);
return 0;
}
```
### 扩展欧几里得算法
扩展欧几里得算法不仅能够找到两个整数的最大公约数,还能找到一组整数解 $(x, y)$ 使得 $ax + by = gcd(a, b)$。这对于解决一些特定类型的方程非常有用。
#### Python 实现
```python
def extended_gcd(a, b):
if b == 0:
return (a, 1, 0)
else:
g, x1, y1 = extended_gcd(b, a % b)
x = y1
y = x1 - (a // b) * y1
return (g, x, y)
```
### 计算最小公倍数
对于任意两个非负整数 $a$ 和 $b$,它们的最小公倍数可以通过以下公式计算得出:
$$ lcm(a, b) = \frac{|a \times b|}{gcd(a, b)} $$
这个公式利用了最大公约数的概念,因此一旦有了 GCD 的实现,就可以直接应用此公式来获取 LCM 的值[^2]。
#### Python 示例
```python
def lcm(a, b):
return abs(a * b) // gcd(a, b)
# 使用上面定义的gcd函数
print(lcm(4, 6)) # 输出应该是 12
```
以上就是关于如何使用编程技术来计算最大公约数和最小公倍数的一些基本方法。每种方法都有其适用场景,选择合适的方法取决于具体的编程环境和个人偏好。
阅读全文
相关推荐

















