Euclidean algorithm
자연수 2개의 최대공약수(greatest common diviser)를 구하는 알고리즘이다. 입력받은 두 수를 서로(互) 나누기(除) 때문에 호제법(互除法) 이라는 이름으로 불린다. 두 개의 자연수 a
, b
에 대해서 a
를 b
로 나눈 나머지를 r
이라고 하면, a
와 b
의 최대공약수는 b
와 r
의 최대공약수와 같다. 이 성질을 이용해 r
이 0
이 될 때 까지 반복해서 나누었을 때의 나누는 수가 a
와 b
의 최대공약수 라고 한다.
C++
int gcd(int a, int b){
if(b == 0) return a;
else return gcd(b, a%b);
}
// 최소공배수 (least common multiple)
int lcm(int a, int b){
return a * b / gcd(a, b);
}
'Algorithm' 카테고리의 다른 글
약수 찾기 (1) | 2021.03.20 |
---|---|
Prefix Sum (0) | 2021.03.01 |
에라토스테네스의 체 (0) | 2020.11.17 |
자주 까먹는 것들 (0) | 2020.11.12 |
문제해결 영단어 정리 (0) | 2020.09.20 |
댓글