728x90
에라토스테네스의 체로 2부터 10000까지 범위의
수를 소수판별하고
그 배열을 이용하여 골드바흐파티션을 뽑아냅니다.
문제에서 주어지는 짝수의 소수 2개 조합은
짝수를 2로 나눈 절반값을 기준으로 차이값이 동일하다는 것
입니다. 전 이 규칙을 몰라서 구글링했습니다.
그 차이값을 0으로 시작하여 2개의 조합이 가장 차이가 적은
소수가 될 때까지 while문을 돌린 후
출력해냅니다.
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 29 30 31 32 33 34 35 | import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); boolean[] res = new boolean[10001]; for(int i=2; i<Math.sqrt(10000); i++) { if(!res[i]) { for(int j=2 ; i*j<=10000 ;j++ ) { res[i*j]=true; } } } int T = sc.nextInt(); for(int i=0; i<T; i++) { int n = sc.nextInt(); n/=2; int diff=0; while(true) { if(!res[n-diff] && !res[n+diff]) { System.out.println((n-diff)+" "+(n+diff)); break; } diff++; } } } } |
'알고리즘 풀이 > 백준' 카테고리의 다른 글
[백준][Java] 1149번 RGB거리 (0) | 2018.05.01 |
---|---|
[백준][Java] 1003번 피보나치 함수 (0) | 2018.04.30 |
[백준][Java] 4948번 베르트랑 공준 (0) | 2018.04.30 |
[백준][Java] 1929번 소수 구하기 (0) | 2018.04.30 |
[백준][Java] 2751번 수 정렬하기 2 (0) | 2018.04.29 |