Euclidean Algorithm
유클리드 호제법은 두 수의 최대공약수를 구하는 알고리즘의 하나이다.
2개의 자연수 a,b에서 a를 b로 나눈 나머지를 r이라고 했을때 GCD(a,b) = GCD(b, r)과 같게 되고 r이 0이 될때의 b의 값이 최대공약수가 된다.
일반적으로 쉽게 생각할 수 있는 최대공약수를 구하는 방법은 모든 자연수를 나눠보는 것이다.
하지만 이경우 시간복잡도는 O(n)이 된다.
다만 이 유클리드 호제법을 사용할 경우 O(logN)이 되어 더 빠른 속도를 나타낼 수 있다.
Greatest Common Divisor(GCD)
2개의 자연수의 공통된 약수인 공약수 중 가장 큰 공약수가 최대공약수이다.
소스코드
※ 아래 코드는 a>b 를 만족함을 가정
> C++
int gcd(int a, int b)
{
return b ? gcd(b, a%b) : a;
}
> JAVA
public static int gcd(int a, int b) {
if (a == 0) return b;
return gcd(a,a%b);
}
Least Common Multiple(LCM)
2개의 자연수의 공배수 중 가장 작은 수
소스코드
> C++
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
> JAVA
public static int lcm(int a, int n) {
return p*q/gcd(a, b);
}
'공부방 > 알고리즘' 카테고리의 다른 글
Longest Increasing Sub-sequence Algorithm(LIS, 최장 증가 부분 수열 알고리즘) (0) | 2021.12.14 |
---|---|
Binary Search Algorithm(이진 탐색 알고리즘) (0) | 2021.11.18 |
Recursion Algorithm(재귀 알고리즘) (0) | 2021.10.15 |
Sieve of Eratosthenes(에라토스테네스의 체) (0) | 2021.07.20 |
Hanoi Tower(하노이의 탑) (0) | 2021.07.19 |