c语言 求两个正整数的最大公约数和最小公倍数,输入两个正整数m和n(m,n小于等于46000),输出m和n的最大公约数和最小公倍数用空格隔开,用递归法 用main函数
时间: 2024-12-14 14:23:47 浏览: 14
在C语言中,求两个正整数的最大公约数(GCD)和最小公倍数(LCM)可以使用欧几里得算法(辗转相除法)来实现递归版本。这里是一个简单的例子,展示了如何在`main()`函数中通过递归计算并输出最大公约数和最小公倍数:
```c
#include <stdio.h>
// 定义递归求最大公约数的函数
int gcd(int a, int b) {
if (b == 0) // 当余数为0时,较小数即为最大公约数
return a;
else
return gcd(b, a % b); // 递归调用,将a和b的余数作为新的参数
}
// 根据公式计算最小公倍数(两数乘积除以最大公约数)
int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
int main() {
int m, n;
printf("请输入两个正整数m和n(m, n <= 46000):");
scanf("%d %d", &m, &n);
// 检查输入是否有效
if (m <= 0 || n <= 0 || m > 46000 || n > 46000) {
printf("输入错误!\n");
return 1;
}
int result_gcd = gcd(m, n);
int result_lcm = lcm(m, n);
printf("最大公约数:%d 最小公倍数:%d\n", result_gcd, result_lcm);
return 0;
}
```
当你运行这个程序时,它会提示用户输入两个正整数,然后计算并输出它们的最大公约数和最小公倍数。
阅读全文