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

JavaScript로 범위 내 모든 숫자의 최소공배수(LCM) 계산하기

두 개의 숫자 a와 b가 담긴 배열을 인자로 받아, [a, b] 범위에 포함된 모든 정수의 최소공배수(Least Common Multiple, LCM)를 반환하는 함수를 작성해 보겠습니다.

접근 방법

먼저 두 숫자의 최소공배수를 계산하는 기본 함수를 작성합니다. 이 함수가 준비되면 [a, b] 범위 안의 각 숫자에 대해 재귀적으로 호출하면서 결과를 누적하고, 범위의 끝에 도달하면 최종 값을 반환하는 방식으로 문제를 해결할 수 있습니다.

예제 코드

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);
};
const leastCommonMultipleInRange = (arr, len = arr[0], res = 1) => {
    if(len <= arr[1]){
       return leastCommonMultipleInRange(arr, len+1, lcm(res, len));
   };
   return res;
};
console.log(leastCommonMultipleInRange([6, 8]));
console.log(leastCommonMultipleInRange([6, 18]));
console.log(leastCommonMultipleInRange([1, 8]));
console.log(leastCommonMultipleInRange([10, 25]));

코드 설명

lcm 함수: 두 수 중 작은 값부터 시작해 1씩 감소시키며 두 수를 모두 나누어 떨어지게 하는 가장 큰 공약수(GCD)를 찾습니다. 공약수를 찾으면 두 수의 곱을 공약수로 나눈 값, 즉 최소공배수를 반환합니다. 2 이상의 공약수가 없다면 두 수는 서로소이므로 두 수의 곱 자체가 최소공배수가 됩니다.

leastCommonMultipleInRange 함수: 매개변수 len을 범위의 시작 숫자로 초기화하고, res에는 현재까지 누적된 최소공배수를 저장합니다. len이 범위의 끝 숫자에 도달할 때까지 1씩 증가시키며 재귀 호출을 반복해 각 숫자와의 최소공배수를 차례로 계산한 뒤, 최종 결과를 반환합니다.

실행 결과

콘솔에는 아래와 같이 출력됩니다.

168
12252240
840
26771144400