백준 1153 nodejs

윤익·2022년 10월 29일
0

https://www.acmicpc.net/problem/1153

const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')
const N = +input[0]
if (N < 8) console.log(-1)
else {
  let output = N % 2 ? [2, 3, 2, N - 7] : [2, 2, 2, N - 6]
  // 주어진 조건 범위에서 골드바흐의 추측이 성립함을 이용
  const P = new Set()
  const visited = new Array(N + 1).fill(0)
  for (let i = 2; i <= N - 6; i++) {
    if (visited[i]) continue
    P.add(i)
    for (let j = i; j <= N; j += i) visited[j] = 1
  }
  if (!P.has(output[3])) {
    for (let i = 1; i < output[3]; i++)
      if (P.has(output[2] + i) && P.has(output[3] - i)) {
        output[2] += i
        output[3] -= i
        break
      }
      // 반드시 해당하는 소수를 찾을 수 있음을 가정
  }
  console.log(output.join(' '))
}
profile
https://nickyoon.tistory.com/ 기술 블로그 이전

0개의 댓글