알고리즘 공부
유클리드 호제법
Lee_SH
2023. 7. 25. 15:54
정의
유클리드 호제법(유클리드 알고리즘)은 최대공약수 (GCD : Greatest Common Divisor)를 구하는 알고리즘이다. 다른 두 수를 각각 A, B (단 A > B), A를 B로 나눈 나머지를 r 이라고 가정할때 A와 B의 최대공약수는 B와 r의 최대 공약수와 같다.
즉 GCD(A,B) = GCD(B,r) = GCD(A, A%B)
코드
반복문 구현
int gcd(int a, int b) {
int tmp;
while (b > 0) {
tmp = a % b;
a = b;
b = tmp;
}
return tmp;
}
재귀 구현
int gcd(long long int a, long long int b) {
if (b == 0) return a;
else return gcd(b, a % b);
}
활용
두 수 a, b가 있을때, 최대공약수 = G 최소 공배수 = L 이라고 하면 a * b = G * L 이 성립한다,
따라서 두 수의 최대공약수를 두하면 최소공배수를 구할 수 있다.
L = a * b / G
따라서 최대 공약수를 알면 최소 공배수를 구할 수 있게 된다.
https://www.acmicpc.net/problem/13241
13241번: 최소공배수
정수 B에 0보다 큰 정수인 N을 곱해 정수 A를 만들 수 있다면, A는 B의 배수이다. 예: 10은 5의 배수이다 (5*2 = 10) 10은 10의 배수이다(10*1 = 10) 6은 1의 배수이다(1*6 = 6) 20은 1, 2, 4,5,10,20의 배수이다. 다
www.acmicpc.net