1. 개념
유클리드 호제법은 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘이다.
호제법이란 두 수가 서로의 수를 나누어 원하는 수를 얻는 알고리즘이다.
2개의 자연수 A B (A>B)에 대해 A를 B로 나눈 나머지를 r이라고 했을 때 A와 B의 최대공약수는 B와 r의 최대공약수와 같다는 성질을 이용한다.
2. 구현
1) 재귀호출
1 2 3 4 | int gcd(int a, int b) { return b ? gcd(b, a%b) : a; } |
2) 반복문
1 2 3 4 5 6 7 8 9 10 | int gcd(int a, int b) { while (b > 0) { int q = a; a = b; b = q % b; } return a; } | cs |
* 응용
유클리드 호제법을 응용하면 최소공배수 또한 구할 수 있다. 간단하게 곱하고 나누어주는 방식으로
1 2 3 4 | int lcm(int a, int b) { return a * b / gcd(a,b); } | cs |
[유클리드 호제법 예제 : http://gyutts.tistory.com/120]
'Programming > Algorithm' 카테고리의 다른 글
에라토스테네스의 체(get Prime Number) (0) | 2018.08.22 |
---|---|
벨만 포드 알고리즘 (Bellman-Ford-Moore Algorithm) (0) | 2018.08.22 |
크루스칼 알고리즘(Kruskal's Algorithm) - 최소 신장 트리(Minimum Spanning Tree) (0) | 2018.08.22 |
다익스트라 알고리즘(Dijkstra Algorithm) (0) | 2018.08.22 |
서로소 집합(Disjoint Set: Union-Find) (0) | 2018.08.22 |