일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 동적계획법
- 자료구조
- 다이나믹프로그래밍
- 멀티쓰레드
- 디자인패턴
- 스케줄링
- codility
- 프로그래머스
- 백준
- 멀티프로세서
- 렌더링 파이프라인
- 락
- Direct12
- 병행성
- 그리디 알고리즘
- 병행성 관련 오류
- 영속성
- DirectX12
- OS
- 그리디알고리즘
- directx
- 쓰레드
- 컨디션 변수
- 파일시스템 구현
- I/O장치
- 다이나믹 프로그래밍
- 운영체제
- DirectX 12
- 타입 객체
- 알고리즘
Archives
- Today
- Total
기록공간
유클리드 알고리즘 (gcd, 최대공약수) 본문
반응형
유클리드 알고리즘이란?
유클리드 알고리즘은 주어진 두 수 사이에 존재하는 최대공약수(gcd)를 구하는 알고리즘이다.
원리
유클리드 알고리즘은 다음과 같은 원리로 동작한다.
-
임의의 두 자연수 a, b가 주어진다. (둘 중 큰 값이 b라고 가정한다.)
-
a와 b를 나눈 나머지를 구한다. 이 결과값을 n이라고 한다. (n = a % b)
-
n이 0일때 a가 최대공약수(gcd)가 된다.
-
만약 n이 0이 아닌 경우, b에 n값을(b = n), a에 b값을(a = b) 넣고 2부터 반복한다.
구현
두가지 방법으로 구현이 가능하다.
반복문을 이용한 구현
int gcd(int a, int b) {
int n;
// b에 큰 값을 위치시키기 위한 조건문
if(a > b) {
int temp = a;
a = b;
b = temp;
}
// 유클리드 알고리즘 부분
// b가 0이 되는 순간의 a가 최대공약수(gcd)가 된다.
while(b != 0) {
n = a % b;
a = b;
b = n;
}
return a;
}
재귀를 이용한 구현
ind gcd(int a, int b) {
if(b == 0)
return a;
else
return gcd(b, a%b);
}
반응형
'Algorithm > 이론' 카테고리의 다른 글
에라토스테네스의 체 (0) | 2020.08.22 |
---|---|
구간 합(Prefix Sum) 알고리즘 (0) | 2020.07.20 |
허프만(Huffman) 트리를 이용한 텍스트 압축 (0) | 2020.07.09 |
다익스트라 알고리즘 (0) | 2020.07.09 |
백트래킹 알고리즘 (Backtracking Algorithm) (0) | 2020.06.30 |
Comments