欧几里德算法。编写程序,求两个正整数的最大公约数和最小公倍数。
时间: 2024-12-10 14:43:02 浏览: 25
欧几里得算法,也称为辗转相除法,是一种古老的数学方法,用于计算两个正整数的最大公约数(Greatest Common Divisor, GCD)。该算法基于这样一个事实:对于任意两个正整数a和b(假设a > b),它们的最大公约数等于较小数b和两数相除余数a % b的最大公约数。
以下是Python中利用欧几里得算法求最大公约数的简单版本:
```python
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
# 示例
num1 = int(input("请输入第一个正整数:"))
num2 = int(input("请输入第二个正整数:"))
gcd_value = gcd(num1, num2)
print(f"{num1}和{num2}的最大公约数是:{gcd_value}")
# 计算最小公倍数(LCM)
lcm_value = abs(num1 * num2) // gcd_value
print(f"{num1}和{num2}的最小公倍数是:{lcm_value}")
```
这个程序首先计算两个数的最大公约数,然后通过公式 `lcm = |a * b| / gcd` 来得到最小公倍数。其中`|.|` 表示取绝对值,因为如果a和b有负数,不影响最大公约数,但会影响最小公倍数的计算结果。
相关问题
. 输入两个正整数m和n,求其最大公约数和最小公倍数。利用欧几里德算法求两个正整数的最大公约数,欧几里德算法又称辗转相除法。该算法的要领是:假设两个正整数为a和 b,先求出前者除以后者的余数,存放到变量 r中,若 r不为 0则将b的值得赋给 a,将r的值得赋给 b;再求出a 除以 b的余数,仍然存放到变量 r 中…,如此反复,直至 r 为 0 时终止,此时 b 中存放的即为原来两数的最大公约数。
以下是用 C 语言实现求最大公约数和最小公倍数的程序:
```c
#include <stdio.h>
// 求最大公约数
int gcd(int m, int n) {
int r;
while (n != 0) {
r = m % n;
m = n;
n = r;
}
return m;
}
// 求最小公倍数
int lcm(int m, int n) {
return m * n / gcd(m, n);
}
int main() {
int m, n;
printf("请输入两个正整数:");
scanf("%d %d", &m, &n);
printf("它们的最大公约数为:%d\n", gcd(m, n));
printf("它们的最小公倍数为:%d\n", lcm(m, n));
return 0;
}
```
程序中,我们首先定义了两个函数:`gcd()` 求最大公约数,`lcm()` 求最小公倍数。在 `gcd()` 函数中,我们采用了欧几里德算法,通过循环求出两个正整数的最大公约数,并返回结果。在 `lcm()` 函数中,我们利用了最大公约数的概念,通过相乘再除以最大公约数的方式求出最小公倍数,并返回结果。
在 `main()` 函数中,我们先要求用户输入两个正整数,然后调用 `gcd()` 和 `lcm()` 函数分别计算它们的最大公约数和最小公倍数,并输出结果。
用python编写程序求输入两个正整数,输出它们的最大公约数和最小公倍数
最大公约数(Greatest Common Divisor,简称GCD)是指能够同时整除两个或多个整数的最大正整数,最小公倍数(Least Common Multiple,简称LCM)则是指能够同时被两个或多个整数整除的最小正整数。
可以使用辗转相除法(又称欧几里德算法)求最大公约数,公式为:gcd(a,b) = gcd(b,a%b)。可以使用两个数的乘积除以它们的最大公约数求最小公倍数,公式为:lcm(a,b) = a*b/gcd(a,b)。
下面是代码实现:
```python
a = int(input("请输入第一个正整数:"))
b = int(input("请输入第二个正整数:"))
# 求最大公约数
def gcd(x, y):
if y == 0:
return x
else:
return gcd(y, x % y)
# 求最小公倍数
def lcm(x, y):
return x * y // gcd(x, y)
print("最大公约数为:", gcd(a, b))
print("最小公倍数为:", lcm(a, b))
```
输出结果如下:
```
请输入第一个正整数:12
请输入第二个正整数:18
最大公约数为: 6
最小公倍数为: 36
```
阅读全文