🔗 문제 링크
https://www.acmicpc.net/problem/6588
✏️ 풀이
const input = require('fs')
.readFileSync('/dev/stdin')
.toString()
.trim()
.split('\n')
.map(Number);
const primeNums = [];
const nums = Array(1_000_000 + 1).fill(true);
nums[0] = false;
nums[1] = false;
for (let i = 2; i <= Math.sqrt(1_000_000); i++) {
if (!nums[i]) {
continue;
}
primeNums.push(i);
for (let j = i * 2; j <= 1_000_000; j += i) {
nums[j] = false;
}
}
console.log(
input.slice(0, -1).map(num => {
const low = primeNums.find(primeNum => nums[num - primeNum]);
if (low) {
const high = num - low;
return `${num} = ${low} + ${high}`;
}
return "Goldbach's conjecture is wrong.";
}).join('\n')
);
먼저 1,000,000까지의 자연수 중에서 소수를 모두 구한다. 그 다음 주어진 수들을 가장 작은 소수부터 큰 소수까지 순서대로 두 값의 차가 소수가 되는 가장 작은 소수를 찾는다. 그러한 소수가 존재하면 n = a + b 형태로 출력하고, 존재하지 않으면 골드바흐의 추측이 틀렸다는 문자열을 반환하면 된다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 2531 - Node.js] 회전 초밥 (1) | 2023.01.09 |
---|---|
[백준 2230 - Node.js] 수 고르기 (0) | 2023.01.06 |
[백준 11660 - Node.js] 구간 합 구하기 5 (1) | 2023.01.05 |
[백준 1743 - Node.js] 음식물 피하기 (1) | 2023.01.03 |
[백준 25706 - Node.js] 자전거 묘기 (0) | 2023.01.02 |