c++输入两个正整数,输出它们的最大公约数与最小公倍数。提示:采用辗转相除法,用循环语句实现。
时间: 2025-04-04 18:14:02 浏览: 69
### 辗转相除法实现最大公约数和最小公倍数
以下是基于辗转相除法(欧几里得算法)的 C++ 示例代码,用于计算两个整数的最大公约数(GCD)和最小公倍数(LCM)。此方法通过 `while` 循环来逐步减少较大数值直到找到 GCD。
#### 计算最大公约数
```cpp
int gcd(int a, int b) {
while (b != 0) { // 当余数不为零时继续执行
int temp = b;
b = a % b; // 更新较小值为当前余数
a = temp; // 更新较大值为之前的较小值
}
return a; // 返回最终的最大公约数
}
```
上述代码实现了经典的辗转相除法逻辑[^1]。它利用了一个重要的性质:如果 \(a\) 和 \(b\) 是正整数,则它们的最大公约数等于 \(b\) 和 \(a \% b\) 的最大公约数。
---
#### 计算最小公倍数
一旦得到了两个数的最大公约数,可以通过以下公式快速得到其最小公倍数:
\[
\text{LCM}(a, b) = \frac{|a \times b|}{\text{GCD}(a, b)}
\]
下面是完整的最小公倍数计算函数:
```cpp
int lcm(int a, int b) {
if (a == 0 || b == 0) return 0; // 特殊情况处理
return abs(a * b) / gcd(a, b); // 使用绝对值防止溢出
}
```
这里需要注意的是,当任意一个输入为零时,最小公倍数应返回零[^2]。
---
#### 完整程序示例
下面是一个综合性的完整程序,演示如何调用这两个函数并打印结果:
```cpp
#include <iostream>
using namespace std;
// 最大公约数函数
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 最小公倍数函数
int lcm(int a, int b) {
if (a == 0 || b == 0) return 0;
return abs(a * b) / gcd(a, b);
}
int main() {
int m, n;
cout << "请输入两个整数:" << endl;
cin >> m >> n;
cout << "最大公约数(GCD): " << gcd(m, n) << endl;
cout << "最小公倍数(LCM): " << lcm(m, n) << endl;
return 0;
}
```
该程序允许用户输入两个整数,并分别显示它们的最大公约数和最小公倍数的结果[^3]。
---
### 性能考量
对于性能敏感的应用场景,可以考虑测量函数的实际运行时间。例如,使用 `<ctime>` 库中的 `clock()` 函数记录操作耗时。这有助于评估不同规模数据下的效率表现。
---
阅读全文
相关推荐



















