[BOJ] # 2609번: 최대공약수와 최소공배수

2022. 5. 2. 21:370️⃣ Algorithm&자료구조/BOJ

 

 

 

문제

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

입력

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

출력

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

 

 

 

 

CODE

 

import sys
a, b = map(int, sys.stdin.readline().split())

def multiply(arr):
    ans = 1
    for n in arr:
        ans *= n
    return ans

def small_num(i):
    d = 2
    i_list = []
    while i > 1:
        if i % d == 0:
            i = i / d
            i_list.append(d)
        else:
            d += 1
    return i_list

a_list = small_num(a)
b_list = small_num(b)
a_list_2 = a_list.copy()
b_list_2 = b_list.copy()

ma = []
for n in b_list:
    if n in a_list_2:
        a_list_2.remove(n)
        b_list_2.remove(n)
    else:
        b_list_2.remove(n)
        ma.append(n)

max_list = a_list + ma + b_list_2
b_list = small_num(b)
mi = []

for i in a_list:
    if i in b_list:
        mi.append(i)
        b_list.remove(i)

print(multiply(mi))
print(multiply(max_list))

 

 

 

 

'0️⃣ Algorithm&자료구조 > BOJ' 카테고리의 다른 글

[BOJ] # 9184: 신나는 함수 실행  (0) 2022.05.03
[BOJ] # 1003번: 피보나치 함수  (0) 2022.05.02
[BOJ] # 1037번: 약수  (0) 2022.05.02
[BOJ] #2164번 카드 2  (0) 2022.04.25
[BOJ] #18258번 큐 2  (0) 2022.04.25