최대공약수 알고리즘
두 수 a
, b
(a > b
) a
를 b
로 나눴을 때,
나누어 떨어진다면 b
가 a
, b
의 최대공약수
나누어 떨어지지 않는다면 나누어 떨어질 때까지 b
를 a%b
(나머지 r
) 로 나누는 과정 반복하기
ex) a = 24
, b = 16
일 때, 24 % 16 = 8
이므로 나누어 떨어지지 않기 때문에 r = 8
b
를 r
로 나누면 16 % 8 = 0
로 나누어 떨어지기 때문에 최종적으로 최대공약수는 8
이를 코드로 나타내면 재귀함수로 구현해볼 수 있음
int gcd(int a, int b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
int a = 8;
int b = 16;
int c = 24;
int result = GCD(a,b); //a와 b의 최대공약수
result = GCD(result,c); //a와 b의 최대공약수 result와 c의 최대공약수
a
, b
에 대한 최대공약수를 구한 후에 c
와의 최대공약수를 구하는 방식으로 적용 가능
최소공배수 알고리즘
int lcm(int a, int b)
{
return a * b / gcd(a,b);
}
두 수 a
, b
를 최대공약수로 나눈 값과 최대공약수를 곱해주면 최소공배수를 구할 수 있음