기초 수학

[기초수학] 최대공약수 .feat ( sort와 sorted 차이 알아두기 )

scone 2022. 4. 26. 15:16

[개념]

  • 두 개 이상의 수에서 공통된 약수를 공약수라고 한다. 그리고 그 중 가장 큰 값을 최대 공약수라고 한다.
  • 사례) 12, 54, 72의 최대 공약수를 구해보자
2 12 54 72
3 6 27 36
  2 9 12

 

다음과 같이 나누기 연산으로 최대 공약수를 구할 수 있습니다. ( 2*3 = 6 )

 

 

 


[실습 1] 두 개의 수를 입력하면 공약수와 최대 공약수를 출력하는 코드를 작성하자

 

# num1, num2 = map(int, (input().split()).sort())  이렇게 하면 오류남
num1, num2 = map(int, sorted(input().split()))
max_num = 1
for n in range(2,num1+1):
    if num1 % n == 0 and num2 % n == 0:
        max_num = n
print(max_num)

코드해석

숫자 두개를 받아서 정렬한 뒤

: input().split() 하면 띄어쓰기를 기준으로 각 요소들이 리스트를 이룬다. 이를 sorted(리스트) 로 씌워 정렬한 것이다.

map으로 각 요소를 int로 캐스팅 하였다.

 

num1은 항상 더 작거나 같은 값이 되는데, n부터 num1까지의 값들로 num1과 num2를 동시에 나눠 공약수를 구하고

그 중 가장 큰 값을 최대 공약수로 구하였다.

 

주의

  • 리스트.sort() 를 하면 리스트는 정렬되지만, 정작 리스트.sort()는 None을 반환하기 때문에 위와 같이 쓸 수 없다.
    반면에 sorted( 리스트 ) 는 그 값 자체가 원래의 리스트를 복사하여 만든 정렬된 새 리스트 이므로 사용할 수 있는 것이다.
  • max_num 은 1로 초기화 하여야 한다. ( 공약수가 1부터 가능하기 때문에 )

[실습 2] 세 개의 수를 입력하여 최대 공약수 출력하기

num1, num2, num3 = map(int, sorted(input().split()))
max_num = 1
for n in range(2,num1+1):
    if num1 % n == 0 and num2 % n == 0 and num3 % n == 0:
        max_num = n
print(max_num)
'''
12 54 72
6
'''

코드해석

실습1과 설명이 같다.