c语言输入描述: 每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109) 输出描述: 对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数之和。
时间: 2025-06-27 14:12:34 浏览: 14
### C语言实现求解最大公约数与最小公倍数之和
以下是基于提供的引用内容以及专业知识设计的一个完整的解决方案:
#### 实现思路
为了计算两数的最大公约数与最小公倍数之和,可以按照以下逻辑编写程序:
1. 使用辗转相除法来获取两个正整数 `a` 和 `b` 的最大公约数。
2. 利用公式 \( \text{最小公倍数} = \frac{\text{a * b}}{\text{最大公约数}} \) 来计算最小公倍数。
3. 将两者的结果相加并返回。
下面是具体的代码实现:
```c
#include <stdio.h>
int gcd(int a, int b) {
while (b != 0) { // 辗转相除法
int temp = a % b;
a = b;
b = temp;
}
return a; // 返回最大公约数
}
int lcm_and_gcd_sum(int a, int b) {
int greatest_common_divisor = gcd(a, b);
int least_common_multiple = (a / greatest_common_divisor) * b; // 防止溢出先除后乘
return greatest_common_divisor + least_common_multiple; // 计算总和
}
int main() {
int a, b;
printf("请输入两个正整数(以空格分隔):\n");
scanf("%d %d", &a, &b);
if (a <= 0 || b <= 0) {
printf("输入错误,请确保输入的是正整数。\n");
return 1;
}
int result = lcm_and_gcd_sum(a, b);
printf("最大公约数与最小公倍数之和为:%d\n", result);
return 0;
}
```
#### 关键点解析
上述代码实现了以下几个功能模块:
- **函数 `gcd`**:通过循环调用辗转相除法[^1],最终得到两个数的最大公约数。
- **函数 `lcm_and_gcd_sum`**:利用已知的最大公约数计算最小公倍数,并将其与最大公约数相加得出结果。
- 主函数部分负责接收用户输入的数据,并验证数据的有效性。如果输入不是正整数,则会提示重新输入[^4]。
此方法不仅高效而且易于理解,在实际应用中有较高的实用价值。
#### 注意事项
当处理大数值时需要注意防止中间运算过程中可能出现的溢出情况。因此建议在计算最小公倍数前优先完成一次除法操作再做乘法运算[(a/greatest_common_divisor)*b][^3]。
---
阅读全文
相关推荐


















