请帮我用c++写一段代码解决杭电OJ的1001题
时间: 2024-09-07 13:03:53 浏览: 57
杭电OJ的1001题是求两个正整数的最小公倍数(Least Common Multiple,简称LCM)。解决这个问题的一个有效方法是使用辗转相除法(欧几里得算法)求出两个数的最大公约数(Greatest Common Divisor,简称GCD),然后利用两数相乘等于它们的最小公倍数与最大公约数的乘积这一性质来计算最小公倍数。
以下是使用C++编写的代码示例:
```cpp
#include <iostream>
// 函数声明
int gcd(int a, int b); // 计算最大公约数
int lcm(int a, int b); // 计算最小公倍数
int main() {
int a, b;
std::cin >> a >> b; // 输入两个正整数
std::cout << lcm(a, b) << std::endl; // 输出最小公倍数
return 0;
}
// 函数定义:计算最大公约数
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
// 函数定义:计算最小公倍数
int lcm(int a, int b) {
return a / gcd(a, b) * b; // 防止溢出,先除后乘
}
```
在这段代码中,`gcd`函数通过递归实现了欧几里得算法,`lcm`函数则利用了`gcd`函数来计算最小公倍数。需要注意的是,在计算最小公倍数时,为了避免在大数运算中可能出现的整数溢出问题,先将较大数除以最大公约数得到一个较小的数,然后再与另一个数相乘。
阅读全文