🤔 유클리드 호제법이란?
"쉽고 빠르게 최대공약수를 구하는 방법"
두 양의 정수 혹은 두 다항식의 최대공약수를 구하는 알고리즘이다. 이 글에서는 두 양의 정수의 최대공약수를 구하는 방법에 대해서만 서술할 예정이다.
최대공약수(GCD)는 두 수가 함께 나눌 수 있는 공약수 중 가장 큰 수를 말한다.
알고리즘을 구현할 때 유클리드 호제법(Euclidean Algorithm)을 사용하면 빠르고 간단하게 구할 수 있다.
📌 원리
유클리드 호제법은 다음과 같은 수학적 원리를 기반으로 한다.
- 두 수 a, b (단, a > b)에 대하여 a = bq + r (0<=r<b)이라 하면,
- a와 b의 최대공약수는 b와 r의 최대공약수와 같다.*
즉,GCD(a, b) = GCD(b, r) = GCD(a, a%b)
이 과정을 나머지가 0이 될 때까지 반복하면,
0이 되기 직전의 수가 최대공약수이다.
✅ 예시
🔹 30과 45의 최대공약수
- 45 ÷ 30 = 1 ... 15
- 30 ÷ 15 = 2 ... 0
→ 최대공약수는 15
⌨️ C언어 구현 코드
유클리드 호제법을 C언어로 구현할 때는 재귀함수를 이용한다.
int gcd(int n, int m) {
if (n < m) swap(n, m);
if (m == 0) return n;
else
return gcd(m, n % m);
}
✍🏻관련 문제
2609번: 최대공약수와 최소공배수
https://www.acmicpc.net/problem/2609
'이론' 카테고리의 다른 글
| [이론_Java 기초] Queue 구현체 비교 (0) | 2026.02.02 |
|---|---|
| [이론] 다익스트라 알고리즘 (0) | 2025.12.14 |
| [이론] 백트래킹(Backtracking) (0) | 2025.10.08 |
| [이론] 최장 공통 부분 수열 (LCS, Longest Common Subsequence) (0) | 2025.10.01 |
| [이론] 배낭 문제 (0) | 2025.10.01 |