Programing/Algorithm

JavaScript로 구현하는 소수 판별 (Prime Check)

2025. 5. 26. 08:31
반응형

소수란 무엇인가?

소수(Prime Number)는 1과 자기 자신만을 약수로 가지는 1보다 큰 자연수를 의미합니다. 예를 들어 2, 3, 5, 7, 11 등은 모두 소수이며, 4, 6, 8, 9 같은 수는 소수가 아닙니다. 소수는 암호학, 해시 함수, 수론 기반 알고리즘 등에 널리 활용되기 때문에 알고리즘 문제에서도 자주 등장합니다.


방법 1: 2부터 n-1까지 나누어 보기

가장 기본적인 소수 판별 방법은 주어진 수를 2부터 n-1까지 순차적으로 나누어 나누어떨어지는 수가 있는지 확인하는 것입니다.

function isPrimeBasic(n) {
  if (n < 2) return false;
  for (let i = 2; i < n; i++) {
    if (n % i === 0) return false;
  }
  return true;
}

console.log(isPrimeBasic(7));  // true
console.log(isPrimeBasic(10)); // false

장점: 개념적으로 단순하고 구현이 쉬움
단점: 수가 커질수록 반복 횟수가 많아져 비효율적


방법 2: 제곱근(√n)까지만 검사하기

모든 합성수는 √n 이하의 인수를 반드시 가지므로, √n까지만 검사해도 소수를 판별할 수 있습니다.

function isPrimeSqrt(n) {
  if (n < 2) return false;
  const limit = Math.floor(Math.sqrt(n));
  for (let i = 2; i <= limit; i++) {
    if (n % i === 0) return false;
  }
  return true;
}

console.log(isPrimeSqrt(29));  // true
console.log(isPrimeSqrt(100)); // false

장점: 반복 횟수를 대폭 줄일 수 있어 성능 향상
단점: 여전히 한 수씩 순차적으로 확인함


방법 3: 에라토스테네스의 체 (여러 수에 대해 소수 판별)

소수인지 여부를 하나씩이 아닌 범위 내의 모든 수에 대해 빠르게 판별할 때 사용하는 방법입니다. 특정 수까지의 소수를 한 번에 구하고 싶을 때 유용합니다.

function sieveOfEratosthenes(limit) {
  const primes = Array(limit + 1).fill(true);
  primes[0] = primes[1] = false;

  for (let i = 2; i * i <= limit; i++) {
    if (primes[i]) {
      for (let j = i * i; j <= limit; j += i) {
        primes[j] = false;
      }
    }
  }

  return primes
    .map((isPrime, index) => isPrime ? index : null)
    .filter((v) => v !== null);
}

console.log(sieveOfEratosthenes(30)); // [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

장점: 수의 범위가 클 때 매우 효율적
단점: 메모리 사용량이 많을 수 있음

관련글: 2016.05.17 - [Programing/Algorithm] - 에라토스테네스의 체를 이용한 소수 찾기


시간 복잡도 비교

방법  시간 복잡도  사용 상황
2부터 n-1까지 나누기 O(n) 단순한 구조, 소수 개별 판단
√n까지 나누기 O(√n) 성능 향상된 개별 소수 판별
에라토스테네스의 체 O(n log log n) 여러 수를 동시에 소수 판별할 때

마무리 및 추천 자료

소수 판별은 수학적 개념을 프로그래밍으로 옮기는 연습에 매우 적합한 주제입니다. 구현 방식에 따라 성능이 크게 달라지므로 상황에 맞는 알고리즘 선택이 중요합니다. 한 개의 수인지, 여러 수인지, 수의 크기가 얼마나 되는지에 따라 가장 효율적인 접근을 선택하는 습관을 길러야 합니다.

소수 관련 알고리즘 문제 풀이에 도움이 되는 무료 리소스:

  • 프로그래머스 알고리즘 강의
  • LeetCode Prime Number Problems
  • replit JavaScript 연습 환경

이 주제는 코딩 테스트에서 자주 등장하며, 숫자 처리에 자신감을 높여주는 중요한 기반이 됩니다.

반응형

'Programing > Algorithm' 카테고리의 다른 글

JavaScript로 해결하는 0/1 배낭 문제 (Knapsack Problem)  (1) 2025.06.03
JavaScript로 해결하는 동전 교환 문제 (Coin Change Algorithm)  (2) 2025.06.03
JavaScript로 이해하는 최적 경로 탐색 (최소 비용 경로, 다익스트라 알고리즘)  (1) 2025.06.03
JavaScript로 구현하는 피보나치 수열 (Fibonacci Sequence)  (1) 2025.06.03
JavaScript로 구하는 최대공약수와 최소공배수 (GCD / LCM)  (0) 2025.05.26
JavaScript로 검사하는 회문 문자열 (Palindrome Check)  (0) 2025.05.23
JavaScript로 푸는 아나그램 판별 (Anagram Detection)  (0) 2025.05.23
JavaScript로 배우는 문자열 뒤집기 (String Reverse)  (0) 2025.05.23
'Programing/Algorithm' 카테고리의 다른 글
  • JavaScript로 이해하는 최적 경로 탐색 (최소 비용 경로, 다익스트라 알고리즘)
  • JavaScript로 구현하는 피보나치 수열 (Fibonacci Sequence)
  • JavaScript로 구하는 최대공약수와 최소공배수 (GCD / LCM)
  • JavaScript로 검사하는 회문 문자열 (Palindrome Check)
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    위시리스트
    블로그
    디자인패턴
    IT 관련
    php
    Java
    자바스크립트유틸
    SQL
    기초
    IT·컴퓨터
    자바
    iT's MY LiFE
    IT블로그
    JavaScript
    사고 싶은 책
    자바스크립트
    js패턴
    It
    jsp
    읽고 싶은 책
Dongkkase
JavaScript로 구현하는 소수 판별 (Prime Check)
상단으로

티스토리툴바