코딩테스트[파이썬]/백준 (BOJ)

백준 1934 - 최소공배수[유클리드 호제법]

softmoca__ 2024. 2. 16. 09:38
목차

https://www.acmicpc.net/problem/1934

 

1934번: 최소공배수

두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있

www.acmicpc.net

최소 공배수 = 두 수의 곱 나누기 최대 공약수

 

 

최대 공약수 구하는 법 [유클리드 호제법]

n=int(input())

for _ in range(n):
    a,b=map(int,input().split())
    tmp=a*b

    while b != 0:
        r = a % b
        a = b  
        b = r
        
    print(a) # 최대공약수

 

 

 

 즉, a,b는 한번의 연산마다 하나는 나머지로, 다른 하나는 다른 값으로 갱신 시켜 주면 된다.

또한 a,b의 대소 관계 상관없이 아래 코드를 사용할 수 있다.

그후 최종적으로 초기 두값의 곱 나누기 최대공약수를 하면 최소공배수를 구할 수 있다.

n=int(input())

for _ in range(n):
    a,b=map(int,input().split())
    tmp=a*b

    while b != 0:
        r = a % b
        a = b  
        b = r
    print(tmp//a)

 

import sys
def gcd(a, b):
    if a % b == 0:
        return b
    return gcd(b, a % b)

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

t = int(sys.stdin.readline().rstrip())
for _ in range(t):
    a, b = map(int, sys.stdin.readline().rstrip().split())
    print(lcd(a, b))

 

 

 

 

참조

https://www.youtube.com/watch?v=TxdljAFjTNw