Algorithm

[백준-9020번/Java] 골드바흐의 추측

1984 2022. 11. 14. 11:23

* 소수판정 : 제곱근 범위 나누기법 사용

* 두 소수의 차이가 가장 작은 골드바흐 파티션을 찾기 위해서 num/2 부터 1씩 줄여 나가면서 찾음.

import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws IOException {

		Scanner scan = new Scanner(System.in);

		int[] arr = new int[10000 + 1];

		for (int i = 1; i < arr.length; i++) {
			if (i == 1) {
				arr[i] = -1;
			} else {
				arr[i] = i;
			}
		}

		// 제곱근 범위 나누기법
		for (int i = 3; i < arr.length; i++) {
			for (int j = 2; j <= Math.sqrt(i); j++) {
				if (i != j && i % j == 0) {
					arr[i] = -1;
				}
			}
		}

		int T = scan.nextInt();
		int num1 = 0;
		int num2 = 0;

		for (int i = 0; i < T; i++) {
			int num = scan.nextInt();
			for (int j = num / 2; j > 0; j--) {
				if (arr[j] != -1 && arr[num - j] != -1) {
					num1 = arr[j];
					num2 = arr[num - j];
					break;
				}
			}
			System.out.println(num1 + " " + num2);
		}

		scan.close();
	}

}
728x90