유클리드 호제법의 코딩만 필요하다면 2.3.2로 가주시기 바랍니다.
숫자 a와 b가 있을 때 a가 b의 배수면 b는 a의 약수
에) 8은 4의 배수, 모든 정수는 1의 배수
예) 4은 8의 약수, 1은 모든 정수의 약수
예) 2와 3의 최소공배수는 6, 3과 9의 최소공배수는 9
'L자'로 최대공약수를 찾을 수도 있고 그냥 소인수분해하여 찾을 수도 있다
위 방법들도 괜찮긴 하지만 다루는 숫자가 정말 커질 수도 있는 코딩에서는 조금 더 효율적인, 무려 기원전 300년경에 유클리드에 의해 발견된 유클리드 호제법이다.
숫자 a와 b가 각각 1112, 695일 때,
1112 % 695 = 417
695 % 417 = 278
417 % 278 = 139
278 % 139 = 0
유클리드 호제법의 한자식 표기는 互除이다. 서로(互) 나눈다(除)는 뜻으로, 그냥 더 큰 숭서 더 작은 수를 '빼'는 원리로 생각하는 것이 더 쉽다. 물론 실제로는 modulus(%) 연산자를 사용한다.
a와 b를 입력받는다
b가 0보다 클때
a와 b에 b와 a%b를 대입한다
a를 출력한다
a, b = map(int, input().split())
while b > 0:
a, b = b, a%b
print(a)