728x90
반응형
1742년에 독일의 수학자 골드바흐는 자신의 추측한 바를 정리하여 오일러에게 편지로 전했다. 골드 바흐의 추측은 아래와 같다.
"4보다 큰 모든 짝수 자연수는 홀수인 두 소수의 합으로 표현될 수 있다."
아래와 같은 예시들에서 골드바흐의 추측이 성립한다.
- 8 = 3 + 5
- 20 = 3 + 17
- 42 = 5 + 37
당신은 실제로 골드바흐의 추측이 성립하는지 프로그램을 작성해 확인해보고자 한다. 여러 숫자가 주어질 때 그 숫자들에 골드바흐의 추측이 성립하는지 확인하는 프로그램을 작성하시오.
입력 형식
첫 줄에는 테스트케이스의 수 T가 주어진다. T는 100이하의 자연수이다.
테스트케이스의 각 줄에는 골드바흐의 추측이 성립하는지 확인해보고자 하는 6이상 백만이하의 자연수가 하나 주어진다.
출력 형식
각 테스트케이스마다 정답을 두 줄로 출력한다.
- 테스트케이스의 첫 줄에는 테스트케이스의 번호를 Case #%d: 형식으로 출력한다.
- 두 번째 줄에는 검증 결과를 출력한다.
문제 출처
- University of Ulm Local Contest 1998
import java.io.*;
import java.lang.*;
import java.util.*;
public class Main {
public static final Scanner scanner = new Scanner(System.in);
public static final int MAX_VALUE = 1000000;
public static final Sieve sieve = new Sieve(MAX_VALUE);
public static final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
public static void testCase(int caseIndex) {
int x = scanner.nextInt();
int a = -1;
int b = -1;
for( int p = 3; p <= x /2; p += 2){
int q = x - p;
if(sieve.isPrime[p] == true && sieve.isPrime[q] == true){
a = p;
b = q;
break;
}
}
// 정답을 출력한다
System.out.printf("Case #%d:\n", caseIndex);
if(a > 0 && b > 0)
{
System.out.printf("%d = %d + %d\n", x, a, b);
}else{
System.out.println(-1);
}
}
public static void main(String[] args) throws Exception {
int caseSize = scanner.nextInt();
for (int caseIndex = 1; caseIndex <= caseSize; caseIndex += 1) {
testCase(caseIndex);
}
}
}
class Sieve{
boolean[] isPrime;
int maxValue;
Sieve(int maxValue){
this.maxValue = maxValue;
isPrime = new boolean[maxValue+1];
this.fillSieve();
}
private void fillSieve(){
// 전체를 true 로 초기화
Arrays.fill(isPrime, true);
// 1은 false
isPrime[1] = false;
// 2부터 maxValue 까지 차례로 선정해서 소수가 아니면 스킵
for( int num = 2; num <= maxValue; num += 1){
// 소수가 아니면 SKIP
if( isPrime[num] == false ){
continue;
}
// 소수가 배수를 삭제해준다. (이때 멱수부터 삭제한다.)
for( long mul = (long)num*num; mul <= maxValue; mul += num){
isPrime[(int)mul] = false;
}
}
}
}
728x90
반응형
'TEAM STUDY > 알고리즘 코딩 테스트 스터디' 카테고리의 다른 글
8회차 - 배열 흔들기 (+) (0) | 2022.08.01 |
---|---|
8회차 - 공약수 게임 (0) | 2022.07.23 |
8회차 - 카잉 달력 (0) | 2022.07.23 |
8회차 - 배열 흔들기 (0) | 2022.07.23 |
8회차 - 소수세기 (0) | 2022.07.23 |