코딩 테스트/알고리즘 공부

소수 판별

fullfish 2022. 4. 20. 23:54

소수는 약수가 1과 본인 자신만을 가짐

 

1. 반복문 사용 (1과 본인 제외 약수가질시 false)

function isPrime(num) {
  if (num <= 1) return false;
  for (let i = 2; num > i; i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

 

2. 제곱근 사용

예를들어 16의 약수는

1, 2, 4, 8, 16이 있는데

16은 1*16, 2*8, 4*4이다

제곱근인 4까지만 계산해보면 그 뒤는 8*2, 16*1처럼 자리 위치만 반전되는것이라 제곱근까지만 계산해도 된다

function isPrime(num) {
  if (num <= 1) {
    return false;
  }
  for (let i = 2; i <= Math.ceil(Math.sqrt(n)); i++) {
    if (n % i === 0) {
      return false;
    }
  }
  return true;
}

 

3. 에라토스테네스의 체

2부터 n까지 배수들을 지우다보면 소수만 남음

function isPrime(num) {
  if(num <= 1) {
    return false;
  }
  //짝수중 2는 유일한 소수
  if( num % 2 === 0) { 
    return num === 2 ? true : false;
  }
  
  const sqrt = parseInt(Math.sqrt(num));

  for( let i = 3; i <= sqrt; i += 2) {
    if(num % i === 0) {
      return false;
    }
  }
  
  return true;
}