백준 2609번 최대공약수와 최소공배수 - Python

림민지·2025년 1월 15일

문제

두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.

입력

첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.

출력

첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.


내 코드

a, b = map(int, input().split())

if a>b :
    k = b
else :
    k = a

L = []

for i in range(1, k+1) :
    if a%i == 0 and b%i==0 :
        L.append(i)

m = max(L)
print(m)
print(m*(a//m)*(b//m))

이렇게 해도 되긴하지만, GPT님🔮이 시간복잡도가 효율적인 다른 방법을 알려주셨다.

def gcd(a, b):
    while b != 0:
        a, b = b, a % b
    return a

def lcm(a, b):
    return a * b // gcd(a, b)

a, b = map(int, input().split())
print(gcd(a, b))  # 최대공약수
print(lcm(a, b))  # 최소공배수
profile
@lim_128

0개의 댓글