Notice
Recent Posts
Recent Comments
Link
just inside
[알고리즘 in python] 최대공약수 / 최소공배수 - 유클리드 호제법 본문
728x90
유클리드 호제법 (Euclidean Algorithm) / 최대공약수 계산
- 두 정수의 최대공약수 (GCD, Greatest Common Divisor)를 효율적으로 계산하는 알고리즘
- 두 수의 최대공약수가 두 수의 차이의 최대공약수와 같다는 것
원리
두 정수 $a$와 $b$ $(a>b)$의 최대공약수를 구하기 위해 다음 과정을 반복
- $a$를 $b$로 나눈 나머지 $r$을 구한다.
- $a$를 $b$로, $b$를 $r$로 대체한다.
- $r$이 0이 될 때까지 이 과정을 반복한다.
- $r$이 0이 되었을 때, $b$가 $a$와 $b$의 최대공약수
$$ GCD(a,b)=GCD(b,a\bmod b)$$
def gcd(a,b):
while b != 0:
a, b = b, a % b
return a
- 시간복잡도는 $O(log\ min(a,b))$ 를 가진다.
최소공배수 (LCM, Least Common Multiple)
- 최대공약수를 이용해 구하기
- 두 수의 곱을 최대공약수로 나눈 값 = 최소공배수
$$
\text{LCM}(a, b) = \frac{|a \times b|}{\text{GCD}(a, b)}
$$
원리
- 두 수 $a$와 $b$의 최대공약수(GCD)를 유클리드 호제법을 사용하여 구함
- 두 수 $a$와 $b$의 곱을 계산
- 두 수의 곱을 최대공약수로 나눔
- 나눈 결과가 최소공배수 (LCM)
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
def lcm(a, b):
return abs(a * b) // gcd(a, b)
728x90
'coding test > 알고리즘' 카테고리의 다른 글
[알고리즘 in python] 이분 탐색 (Binary Search) (0) | 2024.07.30 |
---|---|
다이나믹 프로그래밍 (Dynamic Programming, DP) (0) | 2024.07.16 |
해시 함수 / 해시 테이블 (1) | 2024.07.15 |
[알고리즘 in python] 소수(Prime Number) 구하기 / 에라토스테네스의 체 (0) | 2024.07.11 |
브루트포스(Brute Force) 알고리즘 (0) | 2024.07.08 |