yobdc 发表于 2021-9-15 11:55:59

求最小公约数

x = int(input('请输入一个整数:'))
y = int(input('请输入一个整数:'))
c = 0
if x>y:
    big = x
    small = y
elif x<y:
    small = x
    big = y
else:
    small = x
    big=y
   
    c+=1
   
a = big % small
while a != 0 and c!=0:
    small = big = a
    a = big % small
print('最大公约数为:'+ str(small))

傻眼貓咪 发表于 2021-9-15 12:57:58

本帖最后由 傻眼貓咪 于 2021-9-15 12:59 编辑


最大公因數/最大公約數 Highest Common Factor/Greatest Common Divisor (gcd)
範例:
54 的正因數為:1, 2, 3, 6, 9, 18, 27, 54
24 的正因數為:1, 2, 3, 4, 6, 8, 12, 24
54 和 24 的共同公因數:1, 2, 3, 6
54 和 24 的最大公因數為:6

代碼:(沒有任何導入模塊)
# 最大公因數/大公約數
# Highest Common Factor/Greatest Common Divisor (gcd)

def factor(num: int) -> int:
    for n in range(1, num+1):
      if not (num%n):
            yield n

a = int(input("輸入一個整數 a:"))
b = int(input("輸入一個整數 b:"))

gcd = max(set(factor(a))&set(factor(b)))
print(f"{a} 和 {b} 最大公約數:{gcd}")

最小公倍數 Least Common Multiple (lcm)
範例:
18 的倍數為:18, 36, 54, 72, 90, 108, 126, 144...
12 的倍數為:12, 24, 36, 48, 60, 72, 84, 96, 108, 120, 132...
18 和 12 的最小公倍數:36

代碼:(沒有任何導入模塊)
# 最小公倍數
# Least Common Multiple (lcm)

a = int(input("輸入一個整數 a:"))
b = int(input("輸入一個整數 b:"))

x, y = max(a, b), min(a, b)

while True:
    if x == y:
      print(f"{a} 和 {b} 最小公倍數:{x}")
      break
    while y < x:
      y += min(a, b)
    while x < y:
      x += max(a, b)

代碼:導入模塊(math)
import math

a = int(input("輸入一個整數 a:"))
b = int(input("輸入一個整數 b:"))

print(f"{a} 和 {b} 最大公約數:{math.gcd(a, b)}")
print(f"{a} 和 {b} 最小公倍數:{math.lcm(a, b)}")

niuniuniu666 发表于 2021-9-15 13:47:19

>>> def gcd(x,y):
    while y:
      z = x%y
      x = y
      y = z
    return(x)

>>> gcd(22,33)
11
页: [1]
查看完整版本: 求最小公约数