c语言输入两个正整数mn,求最大公约数和最小公倍数
时间: 2024-10-17 22:10:40 浏览: 48
在C语言中,计算两个正整数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)通常涉及到欧几里得算法(Euclidean Algorithm)用于找到GCD,然后利用公式 `LCM(a, b) = |a * b| / GCD(a, b)` 来计算LCM。
下面是一个简单的步骤说明:
1. **求最大公约数** (GCD):
- 使用辗转相除法(也称欧几里得算法),即对于两个数 a 和 b,如果 b 不为零,则它们的最大公约数等于 b 和 a mod b 的最大公约数。这个过程会一直持续到余数为零,此时的b就是最大公约数。
```c
int gcd(int m, int n) {
if (n == 0)
return m;
else
return gcd(n, m % n);
}
```
2. **求最小公倍数** (LCM):
- 计算两个数的乘积,然后除以它们的最大公约数。
```c
int lcm(int m, int n) {
return (m * n) / gcd(m, n);
}
```
你可以将这两个函数结合起来,先计算GCD,再计算LCM。
```c
#include <stdio.h>
// 定义 GCD 函数
int gcd(int a, int b);
int main() {
int m, n;
printf("请输入两个正整数mn:");
scanf("%d%d", &m, &n);
// 计算并打印 GCD 和 LCM
int result_gcd = gcd(m, n);
int result_lcm = lcm(m, n);
printf("最大公约数(GCD): %d\n", result_gcd);
printf("最小公倍数(LCM): %d\n", result_lcm);
return 0;
}
// 完整的 GCD 函数实现
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
```
阅读全文