c语言程序 辗转相除法:用户输入2个正整数,输出它们的最大公约数和最小公倍数
时间: 2024-02-16 10:59:54 浏览: 74
好的,以下是该程序的C语言代码:
```c
#include <stdio.h>
int main() {
int num1, num2, a, b, gcd, lcm;
printf("请输入2个正整数,中间用空格隔开:\n");
scanf("%d %d", &num1, &num2);
a = num1;
b = num2;
while (b != 0) {
int tmp = a % b;
a = b;
b = tmp;
}
gcd = a;
lcm = num1 * num2 / gcd;
printf("%d和%d的最大公约数是:%d\n", num1, num2, gcd);
printf("%d和%d的最小公倍数是:%d\n", num1, num2, lcm);
return 0;
}
```
程序首先提示用户输入2个正整数,然后使用辗转相除法求出这两个数的最大公约数。在循环中,变量a和b分别为输入的两个数,每次将b赋值为a%b,a赋值为原来的b,直到b为0为止。最后程序计算出最小公倍数,输出最大公约数和最小公倍数。
相关问题
用C语言辗转相除法求两个正整数m和n最大公约数和最小公倍数
在C语言中,我们可以使用辗转相除法(也叫欧几里得算法)来计算两个正整数m和n的最大公约数(GCD)。这个算法基于这样的原理:两个整数a和b的最大公约数等于a除以b的余数c和b之间的最大公约数。如果b为0,则c即为所求的GCD。
下面是简单的C语言代码实现:
```c
#include <stdio.h>
// 辗转相除法求最大公约数
int gcd(int m, int n) {
if (n == 0)
return m;
else
return gcd(n, m % n);
}
// 求最小公倍数,利用公式 lcm(a, b) = |a * b| / gcd(a, b)
int lcm(int m, int n) {
return (m * n) / gcd(m, n);
}
int main() {
int m, n;
printf("请输入两个正整数m和n:");
scanf("%d %d", &m, &n);
// 计算并打印最大公约数
int result_gcd = gcd(m, n);
printf("最大公约数(GCD): %d\n", result_gcd);
// 计算并打印最小公倍数
int result_lcm = lcm(m, n);
printf("最小公倍数(LCM): %d\n", result_lcm);
return 0;
}
```
当你运行这段程序,它会提示输入两个正整数,然后输出它们的最大公约数和最小公倍数。
c语言用辗转相除法求出两个正整数的最大公约数和最小公倍数
最大公约数和最小公倍数的求法如下:
最大公约数(GCD):辗转相除法,也叫欧几里得算法,是求两个正整数的最大公约数的常用方法。
最小公倍数(LCM):两个正整数a和b的积等于它们的最大公约数(GCD)和最小公倍数(LCM)的积,即a*b=GCD(a,b)*LCM(a,b),因此可以通过最大公约数来求最小公倍数。
以下是C语言代码实现:
```c
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
int num1, num2;
printf("Enter two positive integers: ");
scanf("%d %d", &num1, &num2);
printf("GCD(%d, %d) = %d\n", num1, num2, gcd(num1, num2));
printf("LCM(%d, %d) = %d\n", num1, num2, lcm(num1, num2));
return 0;
}
```
代码解释:
- 定义函数gcd来求最大公约数,使用递归实现辗转相除法,当b为0时,a即为最大公约数。
- 定义函数lcm来求最小公倍数,使用a*b/GCD(a,b)的公式来计算。
- 在main函数中,先输入两个正整数,然后调用gcd和lcm函数分别求出它们的最大公约数和最小公倍数,并输出结果。
阅读全文