const fs = require("fs");
const input = fs
.readFileSync(process.platform === "linux" ? "/dev/stdin" : "input.txt")
.toString()
.trim()
.split("\n");
const N = input[0];
let result = [];
function isPrime(num) {
if (num < 2) return false;
for (let i = 2; i * i <= num; i++) {
if (num % i == 0) return false;
}
return true;
}
for (let i = 1; i <= N; i++) {
let num = Number(input[i]);
while (true) {
if (isPrime(num)) {
result.push(num);
break;
}
num++;
}
}
console.log(result.join("/n"));
while (true) {
let smallestPrime = num;
isPrime(smallestPrime);
if (isPrime(smallestPrime) === false) {
smallestPrime++;
} else {
result.push(smallestPrime);
break;
}
}
while(true) 안에서 let smallestPrime = num;을 매번 초기화하고 있다는 점입니다. 이렇게 되면 smallestPrime이 증가하지 못하고 계속 제자리걸음
while(true) 문을 사용해 "소수를 찾을 때까지 1씩 더하며 전부 확인한다"는 방식입니다.
특별한 수학적 공식으로 한 번에 다음 소수를 알아내는 것이 아니라, 조건에 맞을 때까지 하나하나 대입해 보는 가장 직관적인 방법입니다.
isPrime 함수 내의 i * i <= num (또는 ) 부분이 이 알고리즘의 핵심입니다.
JavaScript에서 일반적인 Number 타입은 약 ()까지 안전하게 표현할 수 있다.
40억은 Number 범위 안에 들어가므로, 일단은 BigInt를 쓰지 않고 일반 숫자형으로 풀어도 계산이 정확함