관리 메뉴

한다 공부

[C++] 유클리드 호제법 본문

Algorithm/정리

[C++] 유클리드 호제법

사과당근 2022. 2. 26. 00:45

문제풀이랑 개념을 같이 적어두니 헷갈려서 개념만 적어두는 게시글을 새로 만들었다

GCD(Greatest Common Divisor)
GCD란 최대공약수를 의미한다.

최대공약수를 구할 땐 유클리드 호제법을 이용하는게 편하다. 유클리드 호제법이란, a b의 최대공약수가 a%b(나머지) b의 최대공약수가 같다는 것을 이용하는 것이다.


예를 들어 15와 10이 있다고 해보자.
a=15, b=10이라고 하면 a%b=5, b=10이 된다.
이 a%b값을 a에 대입하자.

x%y를 할 때에는 x>y여야하므로
둘의 자리를 바꿔줘야한다

그러면 a=10, b=5가 된다.
나머지가 0이 될 때까지 해보자.

a%b=5, b=5가 된다.
a%b를 a에 대입하면
a=5, b=5가 되고
a%b = 0이 된다.

0이 되면 작은 값인 b를 리턴한다.
그러면 최대공약수가 b값, 즉 5가 된다


예를 들어 7과 3이 있다고 해보자
a=7, b=3이다.
a%b=1, b=3이다.

a%b를 a에 대입해주면 a=1, b=3이다.
a값이 더 커야하므로 둘의 자리를 바꿔주면 a=3, b=1이다.
a%b를 해주면 0이다. 3나누기 1은 몫이 3, 나머지가 0이다.
a%b=0이라면 이때 b 값이 GCD다. 즉 1이 최대공약수가 된다.




최대공약수를 G, 최소공배수 L이라 하자
G*L = A*B 이다. (수학적 공식이라고 한다.)
A = G*a, B=G*b이라고 하면 (이때 a, b는 서로소이다. 왜냐하면 최대공약수 G로 공통부분을 끄집어 냈으므로)
G*L = G*a*G*b가 되고 약분하면 L/G=a*b가 된다.






[C++] 백준 알고리즘 9613 GCD 합 (유클리드 호제법) (tistory.com)

 

[C++] 백준 알고리즘 9613 GCD 합 (유클리드 호제법)

GCD(Greatest Common Divisor) GCD란 최대공약수를 의미한다. 최대공약수를 구할 땐 유클리드 호제법을 이용하는게 편하다. 유클리드 호제법이란, a b의 최대공약수가 a%b(나머지) b의 최대공약수가 같다는

sxyzn.tistory.com

[C++] 백준 알고리즘 2436 후보 추천하기 (유클리드 호제법) (tistory.com)

 

[C++] 백준 알고리즘 2436 후보 추천하기 (유클리드 호제법)

2436번: 공약수 (acmicpc.net) 2436번: 공약수 첫째 줄에 두 개의 자연수가 빈칸을 사이에 두고 주어진다. 첫 번째 수는 어떤 두 개의 자연수의 최대공약수이고, 두 번째 수는 그 자연수들의 최소공배수

sxyzn.tistory.com

'Algorithm > 정리' 카테고리의 다른 글

[C++] 백트래킹  (0) 2022.02.26
[C++] 에라토스테네스의 체  (0) 2022.02.26
[C] 우선순위 큐 : 히프정렬 (heap)  (0) 2021.08.21
[C] 트리 : 이진 탐색 트리  (0) 2021.08.18
[C] 트리 : 이진트리의 연산  (0) 2021.08.17