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 |
Tags
- 정보처리기사 실기 벼락치기
- 알고리즘
- 다이나믹 프로그래밍
- unity
- 다익스트라
- 정처기 실기 벼락치기
- 정처기 공부법
- eigenvalue
- 스레드전용저장소
- 백준
- 컴파일러
- matrix
- linear algebra
- 구문트리
- 정보처리기사 2025 1회 실기 벼락치기
- rust 스터디
- Rust
- column space
- 링커
- CS정리
- 대상파일
- 선형대수학
- c++
- 코드포스
- 행렬
- 정처기 실기 공부법
- 재배치
- vector
- 벡터
- 컴퓨터밑바닥의비밀
Archives
- Today
- Total
개발_기록용
[C++] 유클리드 호제법 - 최대공약수(GCD)와 최소공배수(LCM) 본문
728x90
유클리드 호제법 : 최대공약수(GCD)를 구하는 방법 중 하나!
최대공약수를 구하는 방법을 생각해보자.
0. 일반적인 접근법
N의 약수의 개수를 구하는 방법
1) 1부터 N 이하 정수로 N 을 나눠서 나머지가 0이 되는 수의 개수를 찾음
=> 시간 복잡도 O(N)
2) 1부터 √N 이하의 정수로 N 을 나눠서 나머지가 0이 되는 수의 개수를 찾고, 그 개수에 2를 곱한다.
=> 시간 복잡도 O( √N)
1. 유클리드 호제법
호제법 : 서로 나눈다는 것.
두 자연수 a, b 에 대해 (a > b) a를 b로 나눈 나머지를 r이라 하면,
a와 b의 최대공약수는 b와 r의 최대공약수와 동일.
b를 r로 나눈 나머지 r'을 구하고, 다시 r을 r'로 나눈 나머지를 구하는
과정을 반복해 나머지가 0이 되었을 때 나누는 수와 a와 b의 최대공약수.
ex) 1071과 1029의 최대공약수 구하기. GCD
1071은 1029로 나눠떨어지지 않으니 1071을 1029로 나눈 나머지 계산 => 42
1029는 42로 나눠떨어지지 않으니 1029를 42로 나눈 나머지 계산 => 21.
42는 21로 나눠떨어지니 1071과 1029의 최대공약수는 21.
public static int GCD(int a, int b){
while(b != 0)
{
int temp = b;
b = a % b;
a = temp;
}
return a;
}
2. 최소공배수 LCM
이번엔 두 수의 최소공배수를 구하는 방법을 보자.
LCM(a, b) = a * b / GCD(a, b)가 성립.
어떤 두 수의 곱은, 그 두 수의 최대공배수와 최소공배수의 곱과 같다.
A와 B의 최대공약수를 G라 하자.
A = G * Q
B = G * K
=> 이 경우, A와 B의 최소공배수는 G * Q * K
public static int LCM(int a, int b){
int gcd = GCD(a, b);
return (a*b) / gcd;
}
3. 여담
gcd(a, b), lcm(a, b)
C++17에선 gcd, lcm 함수를 아예 라이브러리로 지원한다.
<numeric> 모듈을 가져다 쓰면 된다.
#include <numeric>
using namespace std;
int main()
{
cout << gcd(18, 24) << endl; // 6
}
반응형
'알고리즘' 카테고리의 다른 글
[C++ 에라토스테네스의 체] 소수 판별법 (1) | 2024.07.10 |
---|---|
[C++] next_permutation 알고리즘 (1) | 2024.07.08 |
[백준 11055번] 가장 큰 증가하는 부분 수열, C++, 테스트 케이스 (5) | 2024.06.17 |
[CodeForce 327A] Fliping Game C++ 풀이 - Maximum SubArray로 풀기 (0) | 2024.04.08 |
[Codeforce 1003C] C. Intense Heat (0) | 2024.03.15 |
Comments