두 개의 자연수를 입력받아 최대 공약수와 최소 공배수를 출력하는 프로그램을 작성하시오.
첫째 줄에는 두 개의 자연수가 주어진다. 이 둘은 10,000이하의 자연수이며 사이에 한 칸의 공백이 주어진다.
첫째 줄에는 입력으로 주어진 두 수의 최대공약수를, 둘째 줄에는 입력으로 주어진 두 수의 최소 공배수를 출력한다.
24 18
6
72
a,b =map(int,input().split())
def gcd(a,b):
list_a=[]
for i in range(1,a+1):
if a%i==0:
list_a.append(i)
list_b=[]
for j in range(1,b+1):
if b%j==0:
list_b.append(j)
max=0
for i in list_a:
if i in list_b and max<i:
max=i
return max
def lcm(a,b):
if a < b:
tmp=b
b=a
a=tmp
for i in range(1,b):
if (a*i)%b==0:
return a*i
return a*b
print(gcd(a,b))
print(lcm(a,b))
gcd는 최대공약수
lcm은 최소공배수
gcd는 각수의 약수를 구한 후 같은 값들중 제일 큰값을 반환한다.
시간계산생각하면 제일 개수가 적은 리스트를 기반으로 for문을 돌리는게 맞긴한데.. 귀찮
lcm은 코드 중복을 막기위해 작은 건 b 큰건 a로 맞추고 1에서 작은값까지 확인한다.