=> n까지 탐색하는데 각각의 경우에서 다시 소수 리스트를 확인해야하므로 예상보다 시간이 오래걸린다.
function solution(n) {
let answer = 0;
const prime = [];
let target, targetIdx, isFail;
for (let number = 2; number <= n; number++) {
if (prime.length === 0) {
prime.push(number);
answer++;
} else {
target = ~~Math.sqrt(number);
isFail = false;
for (let i = 0; i < prime.length; i++) {
if (!isFail && prime[i] > target) {
break
} else if (!(number % prime[i])) {
isFail = true;
}
}
if (!isFail) {
prime.push(number);
answer++;
}
}
}
return answer;
}
체에 걸러내듯이 소수가 아닌 수들을 걸러내고 남은 수들이 소수가 된다.
function solution(n) {
let visited = new Array(n + 1).fill(0)
const target = ~~Math.sqrt(n);
for (let num = 2; num <= target; num++) {
if (visited[num]) {
continue;
} else {
for (let i = num * 2; i <= n; i += num) {
visited[i] = 1;
}
}
}
return visited.filter(function (value, idx) {
if (idx >= 2 && visited[idx] === 0) {
return true;
}
}).length;
}