function solution(n) {
// 에라토스테네스의 체
// 1. 2부터 N까지의 자연수를 나열
// 2. 처리되지 않은 수 중 가장 작은 수 i를 찾음
// 3. i의 배수를 모두 제거(i는 제거하지 않음)
// 4. 더 이상 반복할 수 없을 때까지 2,3번을 반복
// n + 1개의 true 원소를 가지는 배열 생성
// 각 인덱스는 0 ~ n의 숫자를 표현
let isPrime = new Array(n + 1).fill(true);
// 0과 1은 소수가 아니므로 false
isPrime[0] = false;
isPrime[1] = false;
// 에라토스테네스의 체
for(let i = 2; i*i <= n; i++){
if(isPrime[i]){
// 소수의 배수는 소수가 아니므로, 그 것들을 찾아내기 위해 곱 연산 진행
let multiple = 2;
// 연산은 n보다 작을 때까지 진행할 것
while(i * multiple <= n){
isPrime[i * multiple] = false;
multiple++;
}
}
}
// true인 것들만 filter로 남겨놓는다. 소수만 남긴다는 뜻.
let prime = isPrime.filter((item) => item === true);
return prime.length;
}
에라토스테네스의 체를 사용하면 효율성 테스트도 해결할 수 있다.
시간이 적게 걸리기 때문이다.