Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- factory
- Google OAuth
- 일급 컬렉션
- 일급 객체
- builder
- OAuth 2.0
- java
- spring security
- synchronized
- Volatile
- Spring
- lombok
- Dependency Injection
Archives
- Today
- Total
HJW's IT Blog
Euclid Algorithm: GCD 본문
GCD(Greates Common Divisor) 알고리즘 이란?
- GCD는 두개 이상의 정수의 최대공약수를 찾는데 사용되는 알고리즘이다.
- 원리
- 두 정수 a 와 b가 있다.
- a를 b로 나눈 나머지를 구한다 (n = a%b)
- if (n == 0): GCD = b
- else: a = b, b = n
- 반복한다.
- ex) a = 20, b = 30
- 20%30 = 20, n = 20
- a = 30, b = 20
- 30%20 = 10, n = 10
- a = 20, b = 10
- 20%10 = 0, n = 0
- GCD = 10
유한체(Finite Field)
- 유한체란 유한한 개수의 원소를 갖는 필드이다.
- 유한체는 더하기, 빼기, 곱하기, 나누기와 같은 연산이 가능하다
- 유한체는 유한한 개수의 원소를 갖는다. ex) 2진수는 (0,1)
- 자연수를 소수(prime number) p 로 나눈 나머지의 집합 Z = {0,1,...,p-1} 을 고려하자
- p = 7
| 수식\진법 | 7진법 | 10진법 |
| 3 + 5 | 8 | 8 mod 7 = 1 |
| 5 - 3 | 2 | 6 |
| 2 * 5 | 10 | 3 |
| 5/3 | 5/3 | 4 역원(inverse) 를 구해 곱한후 mod 연산 3의 역원은 3 * x^-1 = 1 (mod 7) 이 만족하는 x의 값 = 5 5 * 5 = 25 25 mod 7 = 4 |
- 유한체(mod p) 를 사용하는 이유
- 답이 큰 정수인 경우 overflow 를 막기 위해 문제에서 큰 소수 p로 나눈 나머지 요구
Extended Euclidean Algorithm
- 일반 GCD와 달리 두 수의 최대 공약수에 대한 선형 조합을 찾는 알고리즘이다. 즉 a 와 b 뿐만 아니라
- ax + by = gcd(a,b)를 만족하는 정수 x 와 y를 찾는것
- 예를 들어 a = 21 , b = 14인 경우 gcd = 7
- 따라서 21x + 14y = 7을 만족하는 x 와 y 를 구해야한다
- x = -1, y = 1
- 따라서 21x + 14y = 7을 만족하는 x 와 y 를 구해야한다
- 유클리드 호제법을 기반으로 만들어진 알고리즘인데, 유클리드 호제법이란
- a, b에 대해 a를 b 로 나눈 나머지를 n 이라 하면 gcd(a,b) = gcd(b,n) 이 성립하는다는 것이다
- 예제)

'알고리즘' 카테고리의 다른 글
| Algorithm: 과반수 찾기 (0) | 2023.04.14 |
|---|---|
| Algorithm: 트리 지름 (0) | 2023.04.14 |
| Algorithm: 부분합(Prefix Sum) (1) | 2023.04.13 |
| Algorithm: RMQ(Range Minimum Query) (0) | 2023.04.12 |
| CCW(Counter-Clockwise) Algorithm (0) | 2023.03.31 |