BLOG main image
전체보기 (437)
Problem Solving (182)
Memory of the Past (255)
186,824 Visitors up to today!
Today 71 hit, Yesterday 156 hit
daisy rss
tistory 티스토리 가입하기!
'최대공약수'에 해당되는 글 1건
2009/02/22 01:08
최근에 모르는 알고리즘이 너무 많아서.. 한계를 많이 느낀다..
그래서 Introduction to Algorithms (일명 CLR) 책에있는 알고리즘들 하나씩 볼 참이다..

그 첫번째로.. 찾아본 부분이 오래전부터 궁금했던 Modular Arithmetic..
오호.. 생각보다 재밌는 내용이 많다..~

GCD (Greatest Common Divisor) 를 구하는 방법중에 가장 빠른 방법이..
바로 Euclidean Algorithm (유클리드 호제법) 이다..
(내가 아는거중에 가장 빠른 방법이다..;; 더 빠른게 있는지도 모름.. ㅋ)

식도 매우 간단해서.. C언어로 구현한다면 10초만에 구현 완료할 수 있다..~

gcd(a, b) = gcd(b, a mod b)


그런데 위에 알고리즘을 이용해서 뭔가 유용한걸 하나 만들어냈는데..
다음과같은 식을 생각해 보자..

d = gcd(a, b) = a*x + b*y

a와 b가 input으로 주어질 때, x, y, d를 찾아주는 알고리즘이 바로 Extended Euclid 이다..

예)

 a   b   a/b   d    x     y
------------------------------
99  78    1    3  -11    14
78  21    3    3    3   -11
21  15    1    3   -2     3
15   6    2    3    1    -2
 6   3    2    3    0     1
 3   0    -    3    1     0


CLRS 책에있는 pseudo code..

EXTENDED-EUCLID(a, b)
1   if b = 0
2       then return (a, 1, 0)
3   (d', x', y') <- EXTENDED-EUCLID(b, a mod b)
4   (d, x, y) <- (d', y', x' - (a/b) * y')
5   return (d, x, y)

(참고: line 4에서 a/b는 quotient 이다)


자.. 이제 UVa 10104 - Euclid Problem 을 풀 수 있다.. ㅋㅋ


'Problem Solving > Algorithm notes' 카테고리의 다른 글

Plane Equation (평면의 방정식)  (0) 2009/04/16
Ellipse (타원)  (0) 2009/04/15
Modular Arithmetic 1탄 - Extended Euclid  (2) 2009/02/22
Combination 개수 구하기 (Pascal's Triangle)  (2) 2009/02/07
Josephus Problem  (2) 2009/01/01
Number of Swap Operations  (0) 2008/07/24
Trackback Address :: http://helloneo.pe.kr/trackback/250 관련글 쓰기
soyoja | 2009/02/25 21:57 | PERMALINK | EDIT/DEL | REPLY
ㅋㅋ 덕분에 나도 10104 풀었넹... 땡큐...
앞으로도 algorithm 관련 article 자주 좀 올려봐...
helloneo | 2009/02/25 23:46 | PERMALINK | EDIT/DEL
음.. 유클리드알고리즘이 뒤에 디오판토스방정식이랑 chinese remainder theorem이랑 이어지는데.. 이해를 못하고있어요.. ㅠㅠ
Name
Password
Homepage
Secret
prev"" #1 next