洛谷P1029 [NOIP2001普及组]最大公约 数和最小公倍数问题,用C语言
时间: 2024-09-06 22:04:12 浏览: 51
noip 2001 普及组 带数据
洛谷P1029题目的主要内容是要求输入两个正整数,输出它们的最大公约数和最小公倍数。这可以通过使用辗转相除法(也称欧几里得算法)来求最大公约数,然后利用最大公约数和两数的乘积求最小公倍数的公式来求解。
以下是使用C语言实现的代码示例:
```c
#include <stdio.h>
// 函数声明
int gcd(int a, int b);
int lcm(int a, int b, int gcdValue);
int main() {
int a, b, gcdValue, lcmValue;
// 输入两个数
scanf("%d %d", &a, &b);
// 计算最大公约数
gcdValue = gcd(a, b);
// 计算最小公倍数
lcmValue = lcm(a, b, gcdValue);
// 输出结果
printf("%d %d\n", gcdValue, lcmValue);
return 0;
}
// 函数定义:计算最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
} else {
return gcd(b, a % b);
}
}
// 函数定义:计算最小公倍数
int lcm(int a, int b, int gcdValue) {
return (a / gcdValue) * b; // 先除后乘防止溢出
}
```
在这段代码中,`gcd` 函数通过递归的方式实现了辗转相除法,`lcm` 函数则利用了最大公约数和最小公倍数之间的关系 `lcm(a, b) = (a * b) / gcd(a, b)` 来计算最小公倍数。
阅读全文