
const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
const inputs = fs
.readFileSync(path)
.toString()
.trim()
.split('\n')
.map(Number);
const size = 123457 * 2;
const map = Array(size).fill(false);
for (let i = 2; i < Math.sqrt(size, 2); i++) {
if (map[i]) continue;
for (let j = i * i; j < size; j += i) {
map[j] = true;
}
}
for (const input of inputs.slice(0, -1)) {
let cnt = 0;
for (let i = input + 1; i <= input * 2; i++) {
if (!map[i]) cnt += 1;
}
console.log(cnt);
}
⏰ 소요한 시간 : -
에라토스테네스의 체 로직을 이용해 2n까지 소수인지, 아닌지를 판단해준다. 그 후 입력되는 값에 따라 소수판별배열 map을 통해 n부터 2n사이에 소수가 몇 개 있는지 세어 출력해주면 된다.