[백준] 9020번 : 골드바흐의 추측 - JAVA [자바]
https://www.acmicpc.net/problem/9020 9020번: 골드바흐의 추측 문제 1보다 큰 자연수 중에서 1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때
st-lab.tistory.com
*해당 포스팅은 상단에 링크된 포스팅을 바탕으로 개인 공부 목적을 위해 작성되었으므로 자세한 내용은 위 링크를 확인해 주시기 바랍니다.
선생님(모르는 제자가 하나 생기신)이 저번에 알려주신 골드바흐의 추측이 문제로 나왔다. 댓글에 나랑 비슷하게 생각하신 분이 계셨다.
진짜 나는 여기서 한 번 더 배워간다. 선생님은 천재다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
/**
* 골드바흐의 추측
* 2보다 큰 모든 짝수는 두 소수의 합으로 나타낼 수 있다.
*
* 골드바흐 파티션
* 짝수를 두 소수의 합으로 나타내는 표현
* 4 = 2 + 2, 6 = 3 + 3, 8 = 3 + 5, ...
*/
public static boolean[] prime = new boolean[10001];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
get_prime();
int N = Integer.parseInt(br.readLine());
while (N-- > 0) {
int n = Integer.parseInt(br.readLine());
int first = n / 2;
int second = n / 2;
while (true) {
if(!(prime[first]) && !(prime[second])) {
sb.append(first).append(" ").append(second).append("\n");
break;
}
first--;
second++;
}
}
System.out.println(sb);
}
public static void get_prime() {
prime[0] = prime[1] = true;
for (int i = 2; i <= Math.sqrt(prime.length); i++) {
if (prime[i]) continue;
for (int j = i * i; j < prime.length; j += i) {
prime[j] = true;
}
}
}
}
에라토스테네스의 체 알고리즘을 자바로 구현하는 게 이제는 손에 익었다. 문제 하나 풀 때마다 제대로 이해하고 넘어가는 게 정말 중요한 거구나를 확실히 느꼈다.
'Computer Science > Algorithm' 카테고리의 다른 글
[백준] 2751 - 수 정렬하기 2 (Java) (0) | 2022.09.21 |
---|---|
[백준] 2750 - 수 정렬하기 (Java) (0) | 2022.09.21 |
[백준] 2581 - 소수 (Java) (1) | 2022.09.19 |
[알고리즘] 빅오 표기법(Big-O notation) 이해하기 (0) | 2022.09.19 |
[백준] 2839 - 설탕 배달 (Java) (0) | 2022.09.18 |