编写两个函数,分别求两个正整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个正整数由键盘输入。
时间: 2023-05-31 08:18:39 浏览: 263
Java求两个正整数的最大公约数和最小公倍数
5星 · 资源好评率100%
### 回答1:
以下是Python代码实现:
```python
def gcd(a, b):
"""求最大公约数"""
if b == :
return a
else:
return gcd(b, a % b)
def lcm(a, b):
"""求最小公倍数"""
return a * b // gcd(a, b)
if __name__ == '__main__':
a = int(input("请输入第一个正整数:"))
b = int(input("请输入第二个正整数:"))
print("最大公约数为:", gcd(a, b))
print("最小公倍数为:", lcm(a, b))
```
解释一下代码:
- `gcd` 函数使用递归的方式求最大公约数,如果 `b` 等于 ,那么 `a` 就是最大公约数,否则递归调用 `gcd(b, a % b)`。
- `lcm` 函数使用公式 `a * b / gcd(a, b)` 求最小公倍数。
- 在主函数中,先从键盘输入两个正整数,然后分别调用 `gcd` 和 `lcm` 函数,最后输出结果。
例如,输入 12 和 18,输出结果为:
```
请输入第一个正整数:12
请输入第二个正整数:18
最大公约数为: 6
最小公倍数为: 36
```
### 回答2:
最大公约数是两个或多个整数共有约数中最大的一个数,最小公倍数是指两个或者多个整数公有的倍数中最小的一个数。为了编写两个函数分别求出这两个正整数,我们需要根据定义进行计算。
首先,我们可以用辗转相减法的算法实现最大公约数的求解。辗转相减法的思想是:两个整数的最大公约数等于这两个数之差和较小的数的最大公约数。因此我们可以写出求最大公约数的函数:
```
def gcd(a, b):
if a < b:
a, b = b, a
while b != 0:
temp = a % b
a = b
b = temp
return a
```
然后我们可以编写最小公倍数的求解函数,根据公式可知,最小公倍数等于两个数的积于最大公约数的商。因此我们可以用下面的函数实现最小公倍数的求解:
```
def lcm(a, b):
return a * b / gcd(a, b)
```
最后,我们在主程序中对上面两个函数进行调用,输入两个正整数并输出它们的最大公约数和最小公倍数:
```
a = int(input('请输入第一个正整数:'))
b = int(input('请输入第二个正整数:'))
print('最大公约数:', gcd(a, b))
print('最小公倍数:', lcm(a, b))
```
这样,我们的程序就完成了。通过这两个函数的编写,我们可以有效地求解任意两个正整数的最大公约数和最小公倍数,为将来计算提供了便利。
### 回答3:
解题思路:
最大公约数和最小公倍数都是两个正整数的概念,因此分别编写求最大公约数和最小公倍数的函数。求最大公约数可以使用辗转相除法,即先将较大的数对较小的数取模,然后将较小的数和刚刚得到的余数再做一次取模操作,依此类推,直到余数为0。此时,较小的数即为最大公约数。求最小公倍数可以用最大公约数来计算,即将两个数相乘,再除以最大公约数即可。
具体代码如下:
```python
# 求最大公约数的函数
def gcd(a, b):
if b == 0:
return a
else:
return gcd(b, a % b)
# 求最小公倍数的函数
def lcm(a, b):
return a * b // gcd(a, b)
# 主函数
if __name__ == "__main__":
a = int(input("请输入第一个正整数:"))
b = int(input("请输入第二个正整数:"))
print("{}和{}的最大公约数为{}".format(a, b, gcd(a, b)))
print("{}和{}的最小公倍数为{}".format(a, b, lcm(a, b)))
```
输入第一个正整数和第二个正整数后,程序会依次调用求最大公约数和最小公倍数的函数,并输出计算结果。例如,如果输入的正整数分别为18和24,则程序输出如下:
```
请输入第一个正整数:18
请输入第二个正整数:24
18和24的最大公约数为6
18和24的最小公倍数为72
```
至此,求两个正整数的最大公约数和最小公倍数的问题得到了解决。
阅读全文