python中输入若干个数求最大公约数
时间: 2024-05-13 17:16:50 浏览: 62
可以使用辗转相除法求解最大公约数。具体实现如下:
```python
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
n = int(input("请输入数字个数:"))
nums = list(map(int, input("请输入数字,以空格分隔:").split()))
result = nums[0]
for i in range(1, n):
result = gcd(result, nums[i])
print("最大公约数为:", result)
```
首先定义一个 `gcd` 函数用于求解两个数的最大公约数。然后读入数字个数和数字列表,依次求解最大公约数即可。
相关问题
python最大公约数和最小公倍数
在Python中,求最大公约数和最小公倍数有几种常用的方法。
方法一:辗转相除法。该方法的具体步骤是,用较小数除较大数,再用出现的余数去除除数,反复进行,直到余数为0。最后的除数即为最大公约数。最小公倍数可以通过两个数的乘积除以最大公约数得到。
方法二:更相减损法。该方法的步骤是,任意给定两个正整数,判断它们是否都是偶数,若是,则用2约简;若不是,则执行下一步。以较大的数减去较小的数,然后用所得的差与较小的数比较,继续执行这个操作,直到所得的减数和差相等。第一步中约掉的若干个2与第二步中等数的乘积就是最大公约数。最小公倍数可以通过两个数的乘积除以最大公约数得到。
方法三:穷举法。该方法的步骤是,从1到较小的数逐个去除,找到两个数都能整除的最大的数,即为最大公约数。最小公倍数可以通过两个数的乘积除以最大公约数得到。
下面是几种方法的Python代码示例:
```python
# 辗转相除法
a = int(input("请输入第一个数字:"))
b = int(input("请输入第二个数字:"))
m = a
n = b
while b != 0:
temp = a % b
a = b
b = temp
max_common_divisor = a
min_common_multiple = m * n // a
print("最大公约数是:%d,最小公倍数是:%d" % (max_common_divisor, min_common_multiple))
# 更相减损法
a = int(input("请输入第一个数字:"))
b = int(input("请输入第二个数字:"))
m = a
n = b
if a < b:
a, b = b, a
divisors = []
num = 1
if a % 2 == 0 and b % 2 == 0:
a, b = a // 2, b // 2
num *= 2
r = a - b
while r not in divisors:
divisors.append(r)
a = max(b, r)
b = min(b, r)
r = a - b
max_common_divisor = num * r
min_common_multiple = (m * n) // (num * r)
print("最大公约数是:%d,最小公倍数是:%d" % (max_common_divisor, min_common_multiple))
# 穷举法
a = int(input("请输入第一个数字:"))
b = int(input("请输入第二个数字:"))
m = a
n = b
while a != b:
if a > b:
a = a - b
else:
b = b - a
max_common_divisor = a
min_common_multiple = (m * n) // a
print("最大公约数是:%d,最小公倍数是:%d" % (max_common_divisor, min_common_multiple))
```
以上是三种常用的方法,你可以根据需要选择其中一种方法来求解最大公约数和最小公倍数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Python求最大公约数和最小公倍数](https://blog.csdn.net/qq_46857088/article/details/124002509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [python求最大公约数和最小公倍数的方法](https://blog.csdn.net/qq_40161609/article/details/82469855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
给定2个正整数,求它们的最大公约数和最小公倍数,并输出。 输入格式: 输入有若干组。 每组数据,在一行中给出两个正整数M和N(≤1000),中间有1个空格。 输出格式: 对于每组输入,在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1个空格分隔。
给定两个正整数 M 和 N,计算它们的最大公约数(GCD)和最小公倍数(LCM),可以通过欧几里得算法(也称辗转相除法)来找到 GCD,然后利用公式 GCD(M, N) * LCM(M, N) = |M| * |N| 计算 LCM。以下是步骤:
1. 如果 N 等于 0,那么 GCD 是 M,因为任何数和 0 的最大公约数都是该数本身。
2. 否则,GCD(M, N) = GCD(N, M % N)。
3. 最小公倍数可以通过 M 和 N 的乘积除以最大公约数得到:LCM(M, N) = (M * N) / GCD(M, N)。
对于每个输入对,你可以编写如下的 Python 代码片段来实现这个功能:
```python
def gcd(m, n):
while n != 0:
m, n = n, m % n
return m
def lcm(m, n):
return m * n // gcd(m, n)
# 示例输入
M, N = map(int, input().split())
# 计算并输出结果
print(gcd(M, N), lcm(M, N))
```
阅读全文