생각보다 문제를 풀다가 자주 사용되는 것으로 생각되어 정리를 해보기로 했다.
Hyunho NOH님의 블로그를 참고하였습니다.
원리는 다음과 같습니다. 확인하려는 수의 절반보다 더 큰 수에 대해서는 확인을 하지 않아도 됩니다. 예를 들어서 확인하려는 수가 14일 때, 절반인 7보다 큰 8, 9, 10, 11, 12는 절대 나누어 떨어지지 않습니다 !
...
이렇게 되기 때문에 마지막 검사는 까지만 진행하면 됩니다.
function isPrime(n) {
if (n <= 1) { // 1
return false;
}
if (n === 2 || n === 3) { // 2 or 3
return true;
}
if (n % 2 === 0) { // 2 * K
return false;
}
let divisor = 3;
let limit = Math.sqrt(n); // 제곱근까지 반복문
while (limit >= divisor) { // 제곱근 >= 3
if (n % divisor === 0) { // 3,5,7,...의 배수인 경우
return false;
}
divisor += 2;
}
return true;
}