c语言用辗转相除法求出两个正整数的最大公约数和最小公倍数
时间: 2023-11-08 09:06:57 浏览: 74
```c
#include <stdio.h>
int main() {
int a, b, gcd, lcm, temp;
printf("请输入两个正整数:");
scanf("%d %d", &a, &b);
// 求最大公约数
while (b != 0) {
temp = a % b;
a = b;
b = temp;
}
gcd = a;
// 求最小公倍数
lcm = (a * b) / gcd;
printf("%d和%d的最大公约数是%d,最小公倍数是%d\n", a, b, gcd, lcm);
return 0;
}
```
相关问题
c语言用辗转相除法求两个数的最大公约数,最小公倍数循环语句
在C语言中,我们可以使用欧几里得算法(也称为辗转相除法)来计算两个整数的最大公约数(Greatest Common Divisor, GCD)。这个算法基于这样的事实:对于任意两个正整数a和b(a > b),它们的最大公约数等于b和a%b(a除以b的余数)的最大公约数。
以下是利用辗转相除法求最大公约数的一个简单C程序示例:
```c
#include <stdio.h>
// 定义函数计算gcd
int gcd(int a, int b) {
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf("%d %d", &num1, &num2);
int result = gcd(num1, num2);
printf("两数的最大公约数是:%d\n", result);
// 计算并打印最小公倍数
int lcm = (num1 * num2) / result; // 根据公式 LCM(a, b) = |a*b| / GCD(a, b)
printf("两数的最小公倍数是:%d\n", lcm);
return 0;
}
```
在这个程序中,`gcd()` 函数通过不断更新 `a` 和 `b` 的值,直到 `b` 变成0为止,此时 `a` 就是最大公约数。然后,根据最小公倍数的计算公式,我们可以通过最大公约数和两个原始数字的乘积除以最大公约数来得到最小公倍数。
c语言:用辗转相除法求两个数的最大公约数和最小公倍数
辗转相除法(又称欧几里德算法)是求两个数的最大公约数的常用方法。其基本思想是利用两数的除法余数性质,不断用较小的数去除较大的数,直到余数为0,此时较小的数就是最大公约数。最小公倍数则可以通过最大公约数和两个数的乘积来求得。下面是C语言代码实现:
```c
#include <stdio.h>
// 计算两个数的最大公约数
int gcd(int a, int b) {
int r;
// 辗转相除法
while (b != 0) {
r = a % b;
a = b;
b = r;
}
return a;
}
// 计算两个数的最小公倍数
int lcm(int a, int b) {
int g = gcd(a, b);
return a * b / g;
}
int main() {
int a, b;
printf("请输入两个正整数:\n");
scanf("%d%d", &a, &b);
printf("%d和%d的最大公约数为%d,最小公倍数为%d\n", a, b, gcd(a, b), lcm(a, b));
return 0;
}
```
在程序中,我们定义了两个函数gcd和lcm,分别用于计算最大公约数和最小公倍数。在gcd函数中,我们使用了辗转相除法,不断用b去除a,然后用a除以余数r,直到r为0,此时a就是最大公约数。在lcm函数中,我们先计算出最大公约数g,然后用a和b的乘积除以g,就可以得到最小公倍数。最后在主函数中,我们读入用户输入的两个整数a和b,然后调用gcd和lcm函数,输出结果即可。
需要注意的是,上述代码中并没有对用户输入的数据进行合法性检查,输入的数应该是正整数,否则程序可能会出现错误。
阅读全文