문제
https://www.acmicpc.net/problem/6588
6588번: 골드바흐의 추측
문제 1742년, 독일의 아마추어 수학가 크리스티안 골드바흐는 레온하르트 오일러에게 다음과 같은 추측을 제안하는 편지를 보냈다. 4보다 큰 모든 짝수는 두 홀수 소수의 합으로 나타낼 수 있다.
www.acmicpc.net
아이디어 및 알고리즘
에라토스에라토스테네스의 체를 이용하여 1부터 100만까지의 소수를 저장해 놓고 확인한다.
과정
1. 에라토스테네스의 체를 이용하여 1부터 100만까지의 소수를 boolean[1000000]에 체크를 해놓는다.
2. boolean 배열만 이용하면 시간이 초과되기 때문에 int배열에 따로 소수만 저장한다.
3. 골드바흐의 추측을 확인할 값을 N이라 할때 int배열에 저장된 작은 소수부터(p) N-p가 소수인지 확인한다.
코드
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception{
Scanner sc=new Scanner(System.in);
boolean[] check=new boolean[1000000];
int size=0;
int index=0;
for(int i=1;i<1000000;i++) {
check[i]=true;
}
for(int i=2;i*i<1000000;i++) {
if(check[i]) {
for(int j=i*i;j<1000000;j+=i) {
check[j]=false;
}
}
}
for(int i=3;i<1000000;i++) {
if(check[i]) {
size++;
}
}
int[] primes=new int[size];
for(int i=3;i<1000000;i++) {
if(check[i]) {
primes[index++]=i;
}
}
while(true) {
int N=sc.nextInt();
if(N==0) {
break;
}
for(int i=0;i<size;i++) {
int prime=primes[i];
if(check[N-prime]) {
System.out.println(N+" = "+prime+" + "+(N-prime));
break;
}
}
}
}
}'코딩 > 백준' 카테고리의 다른 글
| 백준 Q5052 - 전화번호 목록(Java) (0) | 2020.07.21 |
|---|---|
| 백준 Q19238 - 스타트 택시(Java) (0) | 2020.07.20 |
| 백준 Q1613 - 역사(Java) (0) | 2020.07.15 |
| 백준 Q1726 - 로봇(Java) (0) | 2020.07.14 |
| 백준 Q9205 - 맥주 마시면서 걸어가기(Java) (0) | 2020.07.13 |



































