최대공약수,최소공배수

2020-12-18
layout: post
title:  "[파이썬] 최대공약수, 최소공배수 구하기"
author: "asadal"

최대공약수 / 최소공배수

T = int(input())
for i in range(T):
  a, b = map(int, input("두 숫자를 입력하세요(빈 칸으로 띄어쓰기) > ").split())
  num = a * b
  while (b != 0):
    temp = a % b
    a = b
    b = temp
  print(abs(a))

가장 간단한 방법.

최대공약수를 구하는 재귀함수를 정의한다.

def gcd(a, b):
  if a == 0:
    return b
  return gcd(b%a, a) # a=b%a로, b=a로.
t = int(input())
for i in range(t):
  a, b = map(int, input().split())
  res = gcd(a, b)
  print(abs(res))

최대공약수와 최소공배수 구하기

divisors = [] # 공약수를 리스트로
a, b = map(int, input("두 숫자를 입력하세요(빈 칸으로 띄어쓰기) > ").split())
for n in range(1, max(a, b)+1): # 1부터 두 숫자 중 큰 숫자까지 차례로 n값에 대입
  if a % n == 0 and b % n == 0:
    divisors.append(n) # 공약수를 divisors 리스트에 추가
gcd = max(divisors) # 최대공약수
lcm = int(a * b / gcd) # 최소공배수. 두 수의 곱을 최대공약수로 나눈 값
print(gcd, lcm)

다른 방법

from math import gcd
t = int(input())
for _ in range(t):
    a, b = map(int, input().split())
    print(a * b // gcd(a, b), gcd(a, b))
    # 최소공배수 : 두 수를 곱한 값을 두 수의 최대공약수로 나눈 값