λ¬Έμ
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μ λνλΌ μ μκΈ° λλ¬Έμ λ¬Έμ μμ μ£Όμ΄μ§ λ¬Έμμ΄μ μΆλ ₯νλ€.