유클리드 호제법이란?
유클리드 알고리즘은 2개의 자연수의 최대 공약수를 구하는 알고리즘이다. 호제법이란 말은 두 수가 서로 상대방 수를 나누어서 결국 원하는 수를 얻는 알고리즘을 나타낸다.
예시
1071과 1029의 최대공약수를 구하면,
- 1071은 1029로 나누어 떨어지지 않기 때문에, 1071을 1029로 나눈 나머지를 구한다. ≫ 42
- 1029는 42로 나누어 떨어지지 않기 때문에, 1029를 42로 나눈 나머지를 구한다. ≫ 21
- 42는 21로 나누어 떨어진다.
따라서, 최대공약수는 21이다.
78696과 19332의 최대공약수를 구하면,
78696 = 19332×4 + 1368
19332 = 1368×14 + 180
1368 = 180×7 + 108
180 = 108×1 + 72
108 = 72×1 + 36
72 = 36×2 + 0
따라서, 최대공약수는 36이다.
By Kotlin
fun gcd(p: Int, q: Int): Int {
if(q == 0) return p
return gcd(q, p % q)
}
최소 공배수 구하기
두 수의 최소 공배수는 p * q / gcd(p, q)의 관계가 성립한다.
fun lcm(p: Int, q: Int): Int {
return p * q / gcd(p, q)
}
Reference
'개발자의 기본 소양 > ALGORITHM' 카테고리의 다른 글
누적합(부분합)을 응용해서 문제 해결하기 by Kotlin (1) | 2023.10.09 |
---|---|
Topological sort (위상 정렬) with 2252번: 줄 세우기 - Kotlin (0) | 2023.03.25 |
Knapsack Problem (배낭 문제) with 12865번: 평범한 배낭 (0) | 2023.02.26 |
BackTracking with 9663번: N-Queen (0) | 2023.02.24 |
Floyd-Warshall Algirithm (플로이드 워셜 알고리즘) (0) | 2023.02.23 |