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

JavaScript로 숫자의 프리모리얼(Primorial) 구하는 방법

어떤 수 n의 프리모리얼(primorial)은 처음 n개의 소수를 모두 곱한 값입니다. 소수들을 계승(factorial)처럼 곱한다고 해서 '소수 계승'이라고도 불립니다.

예를 들어, n = 4라고 가정해 보겠습니다.

이때 primorial(4)의 결과는 다음과 같습니다.

2 * 3 * 5 * 7 = 210

즉, 처음 네 개의 소수인 2, 3, 5, 7을 모두 곱하면 210이 됩니다.

문제 정의

우리는 하나의 숫자를 입력받아 해당 숫자의 프리모리얼 값을 반환하는 JavaScript 함수를 작성해야 합니다.

구현 접근 방식

이 문제는 두 단계로 나누어 해결할 수 있습니다.

1단계: 소수 판별 함수 만들기

주어진 수가 소수인지 아닌지를 판별하는 헬퍼 함수가 필요합니다. 1은 소수가 아니며, 2는 소수입니다. 그 외의 수는 2부터 자기 자신 미만까지의 수로 나누어 떨어지는지 확인합니다. 나누어 떨어지면 소수가 아니고, 끝까지 나누어 떨어지지 않으면 소수입니다.

2단계: 프리모리얼 계산 함수 만들기

3부터 시작하여 차례대로 수를 증가시키면서 소수를 찾습니다. 소수를 발견할 때마다 누적 곱에 곱해주고, 카운트가 목표 개수 n에 도달할 때까지 반복합니다. 첫 번째 소수인 2는 초기값으로 미리 곱해두므로 카운트는 1부터 시작합니다.

코드 구현

다음은 전체 코드입니다.

const num = 4;

// 소수 판별 함수
const isPrime = n => {
   if (n === 1){
      return false;
   } else if (n === 2){
      return true;
   } else {
      for (let x = 2; x < n; x++){
         if (n % x === 0){
            return false;
         }
      }
      return true;
   };
};

// 프리모리얼 계산 함수
const primorial = num => {
   if (num === 0){
      return 0;
   }
   let count = 1, flag = 3;
   let prod = 2;
   while (count < num){
      if (isPrime(flag)){
         prod *= flag;
         count++;
      };
      flag++;
   };
   return prod;
};

console.log(primorial(num));

코드 설명

  • isPrime 함수: 매개변수로 받은 수가 1이면 false를, 2이면 true를 반환합니다. 그 외의 경우에는 2부터 n-1까지 반복하며 나누어 떨어지는 약수가 있는지 검사합니다.
  • primorial 함수: 입력이 0이면 0을 반환합니다. prod 변수를 첫 번째 소수인 2로 초기화하고, flag 변수를 3부터 시작하여 소수를 찾을 때마다 prod에 곱합니다. count가 num에 도달하면 반복을 종료하고 최종 곱을 반환합니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 출력이 표시됩니다.

210

n = 4일 때 처음 네 개의 소수 2, 3, 5, 7의 곱인 210이 올바르게 출력되는 것을 확인할 수 있습니다.