Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 두 숫자의 최소 공배수(LCM) 계산하기

두 개의 숫자를 인자로 받아 해당 숫자들의 최소 공배수(Least Common Multiple)를 반환하는 함수를 작성해야 합니다.

최소 공배수(LCM)란?

두 숫자 a와 b의 최소 공배수란, a와 b 모두로 나누어 떨어지는 가장 작은 양의 정수를 의미합니다.

예를 들어, 6과 8의 최소 공배수는 24입니다. 24가 6과 8 모두로 나누어 떨어지는 가장 작은 양의 정수이기 때문입니다.

LCM을 계산하는 방법

두 숫자 a와 b의 LCM을 구하는 여러 가지 방법 중 하나는, a와 b의 곱을 두 숫자 모두를 나눌 수 있는 가장 큰 정수, 즉 최대 공약수(GCD, Greatest Common Divisor)로 나누는 것입니다.

6과 8의 경우를 살펴보면, 두 숫자의 곱은 48이고 두 숫자 모두를 나누는 가장 큰 정수는 2입니다. 따라서 LCM은 다음과 같이 계산됩니다.

(6*8)/2 = 24

개념이 명확해졌으니 이제 실제 코드 작성으로 넘어가 보겠습니다.

예제 코드

const lcm = (a, b) => {
   let min = Math.min(a, b);
   while(min >= 2){
      if(a % min === 0 && b % min === 0){
         return (a*b)/min;
      };
      min--;
   };
   return (a*b);
};
console.log(lcm(6, 8));
console.log(lcm(16, 18));
console.log(lcm(0, 8));
console.log(lcm(11, 28));
console.log(lcm(18, 34));

코드 동작 원리 이해하기

두 숫자를 모두 나누는 가장 큰 정수는 항상 두 숫자 중 더 작은 값보다 작거나 같습니다. 따라서 우리는 두 숫자 중 작은 값부터 시작하여 2까지 감소하는 루프를 실행합니다.

반복 과정에서 두 숫자를 모두 나눌 수 있는 값을 발견하면, 감소하는 루프를 사용하고 있기 때문에 그 값이 두 숫자를 모두 나누는 가장 큰 수임을 보장할 수 있습니다. 따라서 즉시 그 값을 이용해 LCM을 계산하여 반환합니다.

만약 루프를 끝까지 돌았다면, 그런 수를 찾지 못했다는 의미입니다. 이 경우 1만이 두 숫자를 모두 나눌 수 있는 유일한 수이며, 즉 두 숫자는 서로소(co-prime) 관계입니다. 따라서 단순히 두 숫자의 곱을 반환합니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

24
144
0
308
306