문제
두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있으며, 최소 공배수는 30이다.
두 자연수 A와 B가 주어졌을 때, A와 B의 최소공배수를 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/1934
1934번: 최소공배수
두 자연수 A와 B에 대해서, A의 배수이면서 B의 배수인 자연수를 A와 B의 공배수라고 한다. 이런 공배수 중에서 가장 작은 수를 최소공배수라고 한다. 예를 들어, 6과 15의 공배수는 30, 60, 90등이 있
www.acmicpc.net
import sys
T=int(sys.stdin.readline())
for _ in range(T):
A,B=map(int,sys.stdin.readline().split())
save_A,save_B=A,B
while(save_A%save_B!=0):
save_A,save_B=save_B,save_A%save_B
print(A*B//save_B)
※ 정수론 및 조합론
● 유클리드 호제법을 이용하여 먼저 최대공약수를 구한다.
● A,B 의 값을 각각 save_A, save_B에 저장한다.
● 그 후 save_A를 save_B의 값으로 나눈 나머지가 0이 되기 전까지 각 단계마다 다음 단계의 save_A는 save_B로, 다음 단계의 save_B는 save_A를 save_B로 나눈 나머지가 되도록 갱신해준다.
● 어느 단계의 save_A를 save_B로 나눈 나머지가 0이 되면 루프를 탈출할 것이고, 그럼 그 때의 save_B의 값이 최대공약수가 된다.
● 어느 두 수의 최소공배수는 두 수를 곱한 후 최대공약수로 나누면 구할 수 있다!
♣ 참고: 유클리드 호제법
https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95
유클리드 호제법 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란
ko.wikipedia.org
'백준(baekjoon) > 브론즈' 카테고리의 다른 글
백준(baekjoon) 1085번: 직사각형에서 탈출(브론즈 3, 파이썬 PYTHON) - 기하1 (0) | 2022.09.06 |
---|---|
백준(baekjoon) 2750번: 수 정렬하기(브론즈 2, 파이썬 PYTHON) - 정렬 (0) | 2022.09.04 |
백준(baekjoon) 2798번: 블랙잭(브론즈 2, 파이썬 PYTHON) - 브루트 포스 (0) | 2022.09.03 |
백준(baekjoon) 10872번: 팩토리얼(브론즈 5, 파이썬 PYTHON) - 재귀 (0) | 2022.09.01 |
백준(baekjoon) 4344번: 평균은 넘겠지(브론즈 1, 파이썬 PYTHON) - 1차원 배열 (0) | 2022.08.30 |