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

자바스크립트로 자릿수의 합 이상인 가장 가까운 소수 찾는 방법

이번 글에서는 하나의 숫자를 입력받아 각 자릿수의 합을 계산한 뒤, 그 합보다 크거나 같은 수 중에서 가장 가까운 소수를 반환하는 자바스크립트 함수를 작성해 보겠습니다.

문제 접근 방식

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

  • 자릿수의 합 계산: 재귀 함수를 활용해 숫자의 각 자릿수를 모두 더합니다.
  • 소수 판별: 특정 수가 소수인지 확인하는 함수를 만듭니다.
  • 가장 가까운 소수 찾기: 자릿수의 합부터 시작해 1씩 증가시키며 처음으로 소수가 되는 값을 찾습니다.

예제 코드

const num = 56563;

// 숫자의 자릿수 합을 재귀적으로 계산하는 함수
const digitSum = (num, sum = 0) => {
    if(num){
        return digitSum(Math.floor(num / 10), sum + (num % 10));
    }
    return sum;
};

// 소수 여부를 판별하는 함수
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 nearestPrime = num => {
    let sum = digitSum(num);
    while(!isPrime(sum)){
        sum++;
    }
    return sum;
};

console.log(nearestPrime(num));

코드 동작 원리

digitSum 함수: 재귀 호출을 통해 자릿수를 분리합니다. num % 10은 마지막 자릿수를, Math.floor(num / 10)은 마지막 자릿수를 제거한 나머지 부분을 의미합니다. 숫자가 0이 되면 지금까지 누적된 합을 반환합니다.

isPrime 함수: 1은 소수가 아니므로 false를, 2는 소수이므로 true를 반환합니다. 그 외의 경우에는 2부터 n-1까지의 수로 나누어 떨어지는지 검사해 소수 여부를 판단합니다.

nearestPrime 함수: 먼저 자릿수의 합을 구한 뒤, 해당 값이 소수가 아닐 동안 1씩 증가시켜 조건을 만족하는 가장 가까운 소수를 찾습니다.

출력 결과

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

29

숫자 56563의 자릿수 합은 5 + 6 + 5 + 6 + 3 = 25입니다. 25는 소수가 아니므로 26, 27, 28을 차례로 검사하고, 29가 소수이기 때문에 최종 결과는 29가 됩니다.