https://www.acmicpc.net/problem/9020
const input = require('fs')
.readFileSync(process.platform === 'linux' ? '/dev/stdin' : './ex.txt')
.toString()
.trim()
.split('\n')
.map( n => Number(n))
input.shift()
for(let num of input){
let a,b;
let bigPrime;
let smallPrime;
if(isPrime(num/2)){
a = num/2
b = num/2
}else{
bigPrime = makePrime(num/2)
smallPrime = makeSmallPrime(bigPrime)
let result = isMatching(bigPrime, smallPrime, num)
a = result[0]
b = result[1]
}
console.log(a + " " + b)
}
function isPrime(number){
for(let a = 2; a<=Math.floor(Math.sqrt(number)); a++){
if(number%a === 0){
return false
}
}
return true
}
function makePrime(number) {
if(number % 2 === 0){
number += 1
}
if(isPrime(number)){
return number
} else{
number += 2
return makePrime(number)
}
}
function makeSmallPrime(primeNum){
primeNum -= 2
if(isPrime(primeNum)){
return primeNum
}else{
return makeSmallPrime(primeNum)
}
}
function makeBigPrime(primeNum){
primeNum += 2
if(isPrime(primeNum)){
return primeNum
}else{
return makeBigPrime(primeNum)
}
}
function isMatching(big, small, number) {
if(big + small === number){
return [ small, big ]
}else if( big + small < number){
big = makeBigPrime(big)
return isMatching(big, small, number)
}else if( big + small > number){
small = makeSmallPrime(small)
return isMatching(big, small, number)
}
}
메모리: 13512kb / 속도: 548ms / 엄청나게 삽질해서 풀었다.. 200ms는 어떻게 나오는걸까..?