JavaScript에서는 직접 만든 사용자 정의 함수를 통해 특정 숫자가 소수(prime number)인지 손쉽게 판별할 수 있습니다. 소수란 1과 자기 자신 외에는 약수를 가지지 않는 2 이상의 자연수를 말하며, 2, 3, 5, 7, 11 등이 대표적인 예입니다.
소수 판별 로직
소수 여부를 확인하는 기본 원리는 다음과 같습니다.
- 숫자가 2보다 작으면 소수가 아닙니다.
- 2부터 해당 숫자의 제곱근(√n)까지 차례대로 나누어 보고, 하나라도 나누어떨어지면 소수가 아닙니다.
- 끝까지 나누어떨어지지 않는다면 그 숫자는 소수입니다.
제곱근까지만 검사해도 충분한 이유는, n = a × b 형태로 분해될 때 a와 b 중 하나는 반드시 √n 이하이기 때문입니다. 이 방식은 n/2까지 모두 검사하는 방법보다 불필요한 반복을 줄여 실행 속도가 크게 향상됩니다.
예제 코드
다음은 숫자가 소수인지 검사하는 사용자 정의 함수의 전체 코드입니다.
function checkNumberIsPrime(number) {
// 2 미만의 숫자는 소수가 아님
if (number < 2) {
return false;
}
// 2부터 제곱근까지 나누어떨어지는지 확인
for (let start = 2; start * start <= number; start++) {
if (number % start === 0) {
return false;
}
}
return true;
}
var number = 11;
if (checkNumberIsPrime(number)) {
console.log("이 숫자는 소수입니다");
} else {
console.log("이 숫자는 소수가 아닙니다");
}코드 설명
- number % start === 0: 나머지 연산자(%)를 사용해 start로 나누어떨어지는지 확인합니다. 나머지가 0이라면 약수가 존재한다는 뜻이므로 즉시 false를 반환합니다.
- start * start <= number: start가 number의 제곱근 이하일 때까지만 반복하여 연산 횟수를 최소화합니다.
- return true: 어떤 수로도 나누어떨어지지 않았다면 소수로 판단합니다.
프로그램 실행 방법
위 프로그램을 실행하려면 Node.js 환경에서 다음 명령어를 입력합니다.
node fileName.js
여기서는 파일 이름이 demo230.js라고 가정하겠습니다.
실행 결과
출력 결과는 다음과 같습니다.
PS C:\Users\Amit\JavaScript-code> node demo230.js 이 숫자는 소수입니다
11은 1과 자기 자신으로만 나누어떨어지므로 소수로 판별된 것을 확인할 수 있습니다. 같은 방식으로 number 값만 바꾸면 어떤 숫자든 간편하게 소수 여부를 검사할 수 있습니다.