티스토리 뷰

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

 

15711번: 환상의 짝꿍

환상의 나라 디디랜드에서는 인연의 증표로 끈을 하나씩 가지고 있다. 그들은 지극히 평범한 방법으로 이 끈을 이용하여 어떤 두 사람이 환상의 짝꿍인지 판단하는데, 두 사람의 끈을 서로 이

www.acmicpc.net

 

 

*에라토스테네스의 체로 소수구하기  2000000까지 소수 구하기. 

 

 

*골드바흐 추측

짝수일 때. 2보다 큰 모든 짝수는 두 개의 소수(Prime number) 합으로 표시 가능

홀수일 때, 2 + 소수 로 표시가능하면됨.  두 수의 합 - 2 가 소수면 됨. 

 

const fs = require('fs');
const input = fs.readFileSync("./dev/stdin").toString().trim().split('\n').map(v=>v.split(' ').map(Number));
const N = input.shift()[0];
const answer = [];

let prime = new Array(2000000).fill(true) //true면 소수
const temp_sqrt =  Math.ceil(Math.sqrt(2000000));
prime[0] = false;
prime[1] = false;
for(let i =2; i<=temp_sqrt; i++){
  if(!prime[i])continue;
  let flag = true;
  for(let j = 2; j<i; j++){
    if(i%j==0){
      flag = false;
      break;
    }
  }
  if(flag){
    for(let k = i+i; k<=2000000; k+=i){
      prime[k]=false
    }
  }
}

const prime_list = [];

prime.forEach((v,i)=>{
  if(v){
    prime_list.push(i)
  }
})


input.forEach(v=>{
  const [a,b] = v;
  const S = a+b
  answer.push(checkDoublePrime(S))

})
console.log(answer.join('\n'))

function checkDoublePrime(x){
  if(x<4) return "NO"   // 2,3일때 
  if(x%2==0){
    return "YES" // 짝수일 때, <- 골드바흐의 추측
  }else{
    let y =  x-2
    if(prime[y]) return "YES"
    for(let i = 0; i<prime_list.length; i++){
      if(y%prime_list[i]==0) return "NO"
    }
    return "YES"
  }
}

 

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함