최대공약수
정수들의 공약수는 동시에 그들 모두의 약수인 정수이다. 공약수 가운데 가장 큰 것을 최대공약수라고 한다.
유클리드 호제법
유클리드 호제법은 2개의 자연수의 최대공약수를 구하는 알고리즘이다. 두개의 자연수 a, b (a > b)가 있다고 할 때 a, v에 대해서 a를 b로 나눈 나머지를 r이라고 하면 a와 b의 최대 공약수는 b와 r의 최대공약수와 같다. 이 성질에 따라 b를 r로 나눈 나머지 r'를 구하고, 다시 r을 r'로 나눈 나머지를 구하는 과정을 반복하여 나머지가 0이 되었을 떄 나누는 수가 a와 b의 최대공약수 이다.
1. 반복되는 규칙 찾기
- 두 정수 a, b의 최대 공약수 gcd( a, b ) 를 구하고자 하낟.
- a를 b로 나눈 나머지를 r이라고 한다.
- a와 b의 최대공약수는 b와 r의 최대공약수와 같다.
- b와 r에 대하여 위의 방법을 반복적으로 적용한다.
- 위 방법을 반복적으로 적용하여 나머지가 0이 되었을 때, 나누는 수가 a, b의 최대공약수이다.
2. 해결방법
유클리드 호제법은 같은 연산이 반복되고 종료조건으로 r이 0이 될때, 위에 식에서는 b가 0으로 들어올 때 종료조건을 만족 함으로 재귀적으로 해결할 수 있겠다.
- a, b를 나눈다.
- 나머지 r을 저장한다.
- b와 r을 나눈다.
- 나머지 r'을 저장한다.
- 위의 과정을 나머지가 0이 될때까지 반복한다.
3. 유클리드 호제법 재귀함수로 구현
# 유클리디안
def Euclidean(a, b):
if (b==0):
return a
return Euclidean(b, a%b)
test_case = int(input())
for i in range(test_case):
a,b = map(int, input().split(" "))
print(Euclidean(a,b))
'하루 30분 알고리즘 기초다지기' 카테고리의 다른 글
[python]파이썬 삽입정렬 알고리즘 (insertion sort) (0) | 2024.09.29 |
---|---|
[파이썬] Permutation 순열 나라야나 판디타 알고리즘 구현하기 (0) | 2024.09.26 |
[python] 하노이 탑/타워 알고리즘 재귀함수로 구현하기 (Hanoi Tower) (0) | 2024.09.24 |
[파이썬]팰린드롬(Palindrome) 판별하기 (0) | 2024.09.23 |
피보나치 수열을 구하는 알고리즘 - 행렬 제곱 (4) | 2024.09.22 |