๋ฌธ์
1742๋ , ๋ ์ผ์ ์๋ง์ถ์ด ์ํ๊ฐ ํฌ๋ฆฌ์คํฐ์ ๊ณจ๋๋ฐํ๋ ๋ ์จํ๋ฅดํธ ์ค์ผ๋ฌ์๊ฒ ๋ค์๊ณผ ๊ฐ์ ์ถ์ธก์ ์ ์ํ๋ ํธ์ง๋ฅผ ๋ณด๋๋ค.
4๋ณด๋ค ํฐ ๋ชจ๋ ์ง์๋ ๋ ํ์ ์์์ ํฉ์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
์๋ฅผ ๋ค์ด 8์ 3 + 5๋ก ๋ํ๋ผ ์ ์๊ณ , 3๊ณผ 5๋ ๋ชจ๋ ํ์์ธ ์์์ด๋ค. ๋, 20 = 3 + 17 = 7 + 13, 42 = 5 + 37 = 11 + 31 = 13 + 29 = 19 + 23 ์ด๋ค.
์ด ์ถ์ธก์ ์์ง๋ ํด๊ฒฐ๋์ง ์์ ๋ฌธ์ ์ด๋ค.
๋ฐฑ๋ง ์ดํ์ ๋ชจ๋ ์ง์์ ๋ํด์, ์ด ์ถ์ธก์ ๊ฒ์ฆํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ํ๋ ๋๋ ๊ทธ ์ด์์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๋ 100,000๊ฐ๋ฅผ ๋์ง ์๋๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ์ง์ ์ ์ n ํ๋๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (6 โค n โค 1000000)
์ ๋ ฅ์ ๋ง์ง๋ง ์ค์๋ 0์ด ํ๋ ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, n = a + b ํํ๋ก ์ถ๋ ฅํ๋ค. ์ด๋, a์ b๋ ํ์ ์์์ด๋ค. ์ซ์์ ์ฐ์ฐ์๋ ๊ณต๋ฐฑ ํ๋๋ก ๊ตฌ๋ถ๋์ด์ ธ ์๋ค. ๋ง์ฝ, n์ ๋ง๋ค ์ ์๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฌ ๊ฐ์ง๋ผ๋ฉด, b-a๊ฐ ๊ฐ์ฅ ํฐ ๊ฒ์ ์ถ๋ ฅํ๋ค. ๋, ๋ ํ์ ์์์ ํฉ์ผ๋ก n์ ๋ํ๋ผ ์ ์๋ ๊ฒฝ์ฐ์๋ "Goldbach's conjecture is wrong."์ ์ถ๋ ฅํ๋ค.
ํ์ด
์ฃผ์ด์ง ์ง์๋ฅผ ๋ํ์์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฌธ์ ์ด๋ค.n = a + b
ํํ๋ก ์ถ๋ ฅํ ๋, b - a
๊ฐ ๊ฐ์ฅ ํฐ์๋ฅผ ์ถ๋ ฅํ๋ผ๊ณ ํ์์ผ๋ฏ๋ก n์ 1์ฉ ๋นผ๊ฐ๋ฉด์ ์์์ธ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๊ณ , ์์๋ผ๋ฉด n - b = a
๋ฅผ ํตํด ์ฐพ์ a๋ ์์์ธ์ง ํ์ธํด์ผ ํ๋ค.
์ฝ๋
์ฒซ๋ฒ์งธ ์๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ๊ณจ๋๋ฐํ์์ถ์ธก {
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true){
int n = Integer.parseInt(br.readLine());
if(n == 0) break;
goldbach(n);
}
System.out.println(sb);
br.close();
}
private static void goldbach(int n) {
for(int i=n; i>0; i--){
if(isPrime(i)){ // i๊ฐ ์์์ธ์ง ํ์ธ
int temp = n - i;
if(isPrime(temp)){ // n - i ๊ฐ ์์์ธ์ง ํ์ธ
sb.append(n).append(" = ").append(temp).append(" + ").append(i).append("\n"); // n = temp + i ํํ.
return; //์ฐพ์ผ๋ฉด ๊ณจ๋๋ฐํ์ถ์ธก์ ๋๋ด์ค๋ค.
}
}
}
sb.append("Goldbach's conjecture is wrong.");
return;
}
private static boolean isPrime(int index) {
if (index < 2) return false; // 2๋ณด๋ค ์์ผ๋ฉด ์์๊ฐ ์๋.
for (int i = 2; i * i <= index; i++) { //๋ฃจํธN ๋ง ํ์ธํ๋ฉด ๋๋๊น i*i๋ก ํธ๋๊ฒ.
if (index % i == 0) {
return false;
}
}
return true;
}
}
์คํจ!
์ ์์ ์ผ๋ก ๋์ํ๋๊ฒ๊ฐ์์ ์ ์ถํด๋ณด๋ ์๊ฐ์ด๊ณผ....ใ
์ด๋๊ฐ ๋ฌธ์ ์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
๋๋ฒ์งธ ์๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class ๊ณจ๋๋ฐํ์์ถ์ธก {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean[] bool = new boolean[1000001];
Arrays.fill(bool, true); //bool์ ๊ธฐ๋ณธ๊ฐ์ true๋ก ๋ณ๊ฒฝ.
for(int i=3; i<1000001; i++){
if(bool[i]){
for(int j=i+i; j<1000001; j=j+i){
bool[j] = false; // 6 -false 9 , 12
}
}
} // ~์ฒด๋ก ๊ฑธ๋ฌ๋
ผ๋ค. ๊ฑธ๋ฌ์ง๊ฐ์ false
while (true){
int n = Integer.parseInt(br.readLine());
if(n == 0) break;
int count = 0;
for(int i=3; i<1000001; i++){
if(bool[i] && bool[n-i]){
System.out.println(n + " = " + i + " + " + (n-i));
count = 1;
break;
}
}
if(count == 0){
System.out.println("Goldbach's conjecture is wrong.");
}
}
}
}
์ด๋ ๊ฒ ์์ฑํ์ฌ ์ด๋ป๊ฒ๋ ํ์๋ค. ์ข๋ ๊ณต๋ถ๊ฐ ํ์ํ๋ค.
์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ์ ํตํด 1000000๊น์ง ๊ฐ ์์ ์ฌ๋ถ๋ฅผ ๊ตฌํ ๋ค ์ ๋ ฅ๋ฐ์ n์ด 0์ด ์๋ ๊ฒฝ์ฐ์ while๋ฌธ์ ๊ณ์ํด์ ์ํํ๋ค.
while๋ฌธ ๋ด๋ถ์์๋ ๋ค์ for๋ฌธ์ ํตํด ํด๋น ๊ฐ์ด ์ฐธ(์์)์ด๊ณ n-i ๋ฒ์งธ ๊ฐ ๋ํ ์ฐธ(์์)์ด๋ผ๋ฉด ๋ฌธ์ ์์
์๊ตฌํ๋ ์ถ๋ ฅ ํ์์ ๋ง๊ฒ ๊ฐ๋ค์ ์ถ๋ ฅํ๋ค.
๋ํ, count ๊ฐ์ 1๋ก ๊ฐฑ์ ํ ๋ค count ๊ฐ์ ํ์ธํ์ฌ ๊ทธ ๊ฐ์ด 0์ด๋ผ๋ฉด ๋ ํ์ ์์์ ํฉ์ผ๋ก n์ ๋ํ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์ ์ฃผ์ด์ง ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.