用辗转相除法求最大公约数和最小公倍数
时间: 2023-11-08 21:05:50 浏览: 155
辗转相除法又称欧几里得算法,可以用于求两个整数的最大公约数。最小公倍数则可以通过最大公约数求得。
假设两个数分别为a和b,不妨设a>b。
- 首先,用a除以b,得到商q和余数r。
- 若r=0,则b即为最大公约数。
- 若r!=0,则用b除以r,得到商q1和余数r1。
- 若r1=0,则r即为最大公约数。
- 若r1!=0,则用r除以r1,得到商q2和余数r2。
- 重复以上步骤,直到rk=0为止,此时r(k-1)即为最大公约数。
最小公倍数可通过最大公约数的公式求得:两数相乘除以它们的最大公约数。
具体实现可以看下面的Python代码:
```python
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def lcm(a, b):
return a * b // gcd(a, b)
a = 48
b = 36
print('最大公约数:', gcd(a, b))
print('最小公倍数:', lcm(a, b))
```
输出结果为:
```
最大公约数: 12
最小公倍数: 144
```
请问这样回答是否满意?
相关问题
C语言用辗转相除法求最大公约数和最小公倍数
最大公约数和最小公倍数可以通过辗转相除法来求解。
辗转相除法,也叫欧几里得算法,是求最大公约数的一种方法。其基本思想是:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。即,设两数为a、b(a>b),它们的最大公约数设为gcd(a,b),根据辗转相除法,有:
gcd(a,b) = gcd(b,a%b)
当a%b=0时,b即为所求的最大公约数。
最小公倍数是指两个或多个整数公有的倍数中最小的一个。可以通过最大公约数来求解。设两数为a、b(a>b),它们的最小公倍数设为lcm(a,b),则有:
lcm(a,b) = a * b / gcd(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 a, b;
printf("请输入两个整数:");
scanf("%d%d", &a, &b);
printf("它们的最大公约数为:%d\n", gcd(a, b));
printf("它们的最小公倍数为:%d\n", lcm(a, b));
return 0;
}
```
c++用辗转相除法求最大公约数和最小公倍数
在 C++ 中,可以使用欧几里得算法(也称为辗转相除法或更相减损术)来求两个整数的最大公约数(Greatest Common Divisor, GCD)。这个算法基于这样一个原理:两个整数的最大公约数等于其中较小的那个数和两数余数的最大公约数。
以下是简单的 C++ 代码示例:
```cpp
#include <iostream>
int gcd(int a, int b) {
if (b == 0)
return a;
else
return gcd(b, a % b);
}
// 使用上面的gcd函数计算最小公倍数(LCM)
int lcm(int a, int b) {
int temp = gcd(a, b);
return (a * b) / temp;
}
int main() {
int num1, num2;
std::cout << "请输入两个整数:";
std::cin >> num1 >> num2;
std::cout << "最大公约数(GCD)为:" << gcd(num1, num2) << "\n";
std::cout << "最小公倍数(LCM)为:" << lcm(num1, num2) << "\n";
return 0;
}
```
在这个例子中,`gcd` 函数递归地应用辗转相除法则,直到找到 `b` 等于 0 的情况。然后,`lcm` 函数利用 `gcd` 计算结果和原始两个数乘积除以 `gcd` 的值,即得到最小公倍数。
阅读全文