유클리드 호제법?
두 수의 최대 공약수를 O(lgN)만에 구하는 방법이다.
생각보다 자주 까먹으니까.. 틈틈이 시간 나면 한 번씩 봐주자.
재귀 함수 구현
int gcd(int a, int b)
{
if(b == 0) return a;
else return gcd(b, a % b);
}
반복문 구현
전제 조건 : a > b
while(1)
{
int r = a % b;
if(r == 0) return b;
a = b;
b = r;
}
최소 공배수는?
int lcm(int a, int b)
{
return (a / gcd(a, b)) * (b / gcd(a, b)) * gcd(a, b);
}
최소 공배수에서 gcd(a, b)를 3번이나 해주는 이유는 특정 구간에서 오버플로우의 방지를 막기 위해서이다.
'Algorithm > Algorithm Concept' 카테고리의 다른 글
수학 관련 (0) | 2021.08.18 |
---|---|
백트래킹 (Backtracking) (0) | 2021.07.28 |
파라메트릭서치 (Parametric Search) (0) | 2021.05.09 |
[cmath] math 관련 함수들 (0) | 2021.05.07 |
stable sort과 unstable sort (0) | 2021.04.26 |