지난 풀이 참고
1
을 제외하고 2
부터 n
까지의 수를 빈 배열 numbers
에 넣는다.n
이 소수가 아니라면 1
혹은 n
이 아닌 임의의 수 a
와 b
의 합성수이다. n
의 제곱근까지만 순회하는 루프를 만든다.numbers
배열에 존재하는 수num
의 제곱을 구한다.num
의 제곱에서 num
을 더한 수 j
를 구한다.numbers[j-1]
을 삭제한다.n
미만의 모든 합성수를 지울 수 있다.function solution(n) {
let answer = 0;
let numbers = [];
for(let i = 1; i <= n; i++) {
numbers.push(i);
}
for(let i = 1; i*i < n; i++) {
if(numbers[i]) {
let num = numbers[i];
for(let j = num*num; j <= n; j += num) {
numbers[j-1] = 0;
}
}
}
numbers = numbers.filter((el) => {
if(el) return el;
})
numbers.shift();
answer = numbers.length;
return answer;
}