const { count } = require('console');
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let answer = '';
input.forEach((element,index) => {
if(Number(element) === 0) {
input.splice(index,1);
}
});
let len = input.length;
for(let i=0; i < len; i++) {
let N = Number(input[i]);
let primeNum = new Array((2*N)+1);
primeNum.fill(true);
// console.log(primeNum.length);
primeNum[0] = primeNum[1] = false;
for(let n = 2; n <= Math.sqrt(N*2); n++) {
if(primeNum[n]) {
let x = 2;
while(n * x <= N*2) {
primeNum[n * x] = false;
x++;
}
}
}
primeNum.splice(0,(N+1))
console.log(primeNum);
let count = 0;
primeNum.forEach(element => {
if(element) {
count++;
}
});
answer += count + '\n'
}
console.log(answer);
뭐시기 체 알고리즘문제와 유사하다. 그 대신 끝숫자를 2N으로 한다.
문제를 풀이하자면
1. 0부터 2N까지의 배열에서 소수를 구한다.(false로 바꾸는 것)
2. 그 배열에서 N까지를 잘라낸다.(그러면 N~2N배열이 됨)
3. 그 배열에서 값이 true인 것의 개수를 출력한다.