소수(prime number) 란, 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다.
1 은 소수가 될 수 없고, 2는 짝수중 유일한 소수이다.
아래의 함수는 제곱근까지만 확인하는 함수이다.
function isPrime(num) {
if (num === 1) {
return false;
} else if (num === 2) {
return true;
} else {
for (let i = 2; i <= Math.floor(Math.sqrt(num)); i++) {
if (num % i === 0) {
return false;
}
}
return true;
}
}
함수에 입력값으로 들어가는 num
의 제곱근보다 작은 수에서 안 나눠진다면, 제곱근 보다 큰 수에서도 안나눠지기에 충분하다.
예를 들어, num
이 10 이라면, 10 의 약수는 1, 2, 5, 10 이다.
여기서 1 과 10을 빼면, 2 와 5 가 남게 되는데 이 두 숫자는 2 5 , 5 2 이렇게 몫이 커지면 나누는 값이 작아지고 나누는 값이 커지면 몫이 작아지는 반비례관계이기에 10의 제곱근인 3.16 보다 작은 2에서 나눠졌으므로 더이상 계산을 해볼 필요가 없다.
또 하나, num
이 17 이라면, 17의 제곱근은 대략 4.123 이므로 1을 제외한 2, 3, 4 로 나누어지는지 확인 후 나누어지는게 없다면 그 이상의 값에서도 나누어지는 값이 없기에 소수로 판별하면 된다. (실제로 소수이다.)