기초 수학
[기초수학] 유클리드 호제법
scone
2022. 4. 26. 15:43
[개념]
- x, y의 최대 공약수는 y, r의 최대 공약수와 같다.
- 이때 r은 ( x % y )
- 나머지가 0이 나오는 시점까지 연산하여 최대 공약수를 구할 수 있다.
[실습 1] 유클리드 호제법을 이용하여 최대공약수를 구해보자.
num1, num2 = map(int, input().split())
temp1, temp2 = num1,num2
while temp2>0 :
temp = temp2
temp2 = temp1 % temp2
temp1 = temp
print('{}과 {}의 최대 공약수는 {}'.format(num1,num2,temp1))
for i in range(1,temp1+1):
if temp1 % i == 0:
print('{}과 {}의 공약수는 {}'.format(num1,num2,i))
'''
12 36
12과 36의 최대 공약수는 12
12과 36의 공약수는 1
12과 36의 공약수는 2
12과 36의 공약수는 3
12과 36의 공약수는 4
12과 36의 공약수는 6
12과 36의 공약수는 12
'''
코드 해석
temp1 % temp2 != 0 일 경우
temp1의 자리에는 temp2가 들어가고
temp2의 자리에는 temp1%temp2 의 나머지 연산 값이 들어간다.
주의할 점은 이때
temp1 = temp2
temp2 = temp1%temp2 를 하게되면
temp2 에는 기존의 나머지 연산 값이 아니라 이미 바뀐 값이 들어가 temp2%temp2 가 되기 때문에 0이 된다는 것이다.
따라서 temp라는 별도의 변수를 주어
temp = temp2
temp2 = temp1%temp2
temp1 = temp
를 해주어야 한다.
이는 외우지 않으면 문제 맞닿뜨렸을 때 갑자기 헷깔릴 수도 있을 것 같다.