1. 


/* Problem : 543
* Author : Dennis Wilfert
* Author : Johann Studt
* Status : AC
* Runntime : 1.620
*/

import java.io.*;
import java.util.*;

public class Main {

public static void main(String... args){

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int a = 1;

/* Endlosschleife wird erst beendet wenn eine null eingegeben wird
* sind damit auch mehrzeilige Eingaben funktionieren.
*/
while(true){

StringTokenizer line = null;

try{
line = new StringTokenizer(reader.readLine());
} catch (IOException e){
System.exit(0);
}

/* Aus jeder Zeile die einzelnen mit Leerzeichen getrennten Zahlen auslesen
* bis keine Zeichen mehr kommen
*/
while (line.hasMoreTokens()) {

/* Naechstes Zeichen in der Variable a speichern, sollte es sich nicht
* um eine Zahl handeln, die Exception abfangen und a=1 setzen
* (1 ist auserhalb des erlaubten Wertebereichs)
*/
try{
a = Integer.parseInt(line.nextToken());
} catch (NumberFormatException e){
a = 1;
}

/* Fuer alle geraden Zahlen von 6 bis 999999 eine Primzahlkombination
* suchen und ausgeben
*/
if(a >= 6 && a < 1000000 && a%2 == 0){

boolean found = false;
int ahalf = a/2;

// Von drei eine Primzahl suchen bis maximal zur haelfte von a
for (int i = 3; i <= ahalf; i = i+2){

boolean b = false;
int sqi = (int)Math.sqrt(i);
for (int n = 3; n <= sqi; n = n+2){

if ( i%n == 0){

b = true;
break;
}

}
/* Ist b === false wurde eine Primzahl gefunden, dann ueberpruefen
* ob die Zahl a-i auch eine Primzahl ist
*/
if ( b == false){

int i2 = a-i;
boolean b2 = false;

int sqi2 = (int)Math.sqrt(i2);
for (int n = 3; n <= sqi2; n = n+2){

if ( i2%n == 0){

b2 = true;
break;
}

}

/* Handelt es sich bei i2 auch um eine Primzahl, dann die
* beiden Werte ausgeben und die Schleife verlassen
*/
if (b2 == false){

if(a == i + i2){

System.out.println( a + " = " + i + " + " + i2);
found = true;
}

}

}

if(found == true) break;

}

}
else{

// Wenn a==0 Programm beenden
if( a == 0 ){

try {
reader.close();
} catch (IOException e) {

System.exit(0);
}
System.exit(0);
}

}
}
}

}
}


2.

/*
*    Markus Mohr, Rolf Schirm, Franz Mathauser
*    Datum: 24.03.09
*    IFB 2C
*    ACCEPTED: 543, 2.320
*/

// 543 GoldBach

import java.io.BufferedReader;
import java.io.InputStreamReader;


public class Goldbach {

public static boolean isPrim(int n) {

if(n == 1 || n%2 == 0)
return false;

short root = (short)Math.sqrt(n);
for (int i = 3; i <= root; i=i+2) {
if (n % i == 0)
return false;
}
return true;
}

public static void main(String... args) throws Exception {

BufferedReader reader = new BufferedReader(new
InputStreamReader(System.in));
int[] prime = new int[178499];
prime[0]=2;
prime[1]=3;
int anz=2;
int maxPrime=3;
int zahl;
int first=0;
int second=0;
boolean stop;


while (true) {

zahl = Integer.parseInt(reader.readLine());
stop=false;

if (zahl == 0) break;

if (zahl > maxPrime) {
for(int i = maxPrime+2; i<=zahl; i+=2) {
if(isPrim(i)) {
prime[anz]=i;
anz+=1;
prime[anz]=1000000;
maxPrime=i;
}
}
}

for(int i = 0; prime[i] < zahl; i++) {
first = prime[i];
second = zahl-prime[i];
if (isPrim(second)) {
stop=true;
break;

}
}

if (stop) {
System.out.println(zahl+" = "+first+" + "+second);
}
else {
System.out.println("Goldbach's conjecture is wrong.");
}

}

}
}

3.

import java.util.Scanner;

/* Autoren: Mitterreiter Christian, Rolf Luigs
* Runtime: 2.420, Accepted
* Nummer: 543
*/

public class Main {


public static boolean isPrime (int n){ //Testet, ob die Zahl n eine Primzhal ist
if (n < 2) return false;
boolean isPrime = true;

for (int i = 2; i*i <= n; i++) //Durchläuft alle Zahlen bis zur Wuzel von n. Wird ein echter Teiler gefunden,
if (n % i == 0) { //handelt es sich um keine primzhal.
isPrime=false;
break;
}
return isPrime;
}


public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

int[] input = new int[100000];
input[0]=1;
int k=0;

while (input[k]!=0) { //Speichert die eigegebenen Zahlen in ein Array
k++;
input[k]=scanner.nextInt();
}



for(int r=1;r<input.length && input[r]!=0;r++) {

int i;


for(i=input[r];i>=0;i--){ //Testet, ob die Zahl r und (r-1) Primzhalen sind.
if(isPrime(i)&& isPrime(input[r]-i)){
System.out.println(input[r] +" = " + (input[r]-i) + " + " + i);

break;
}
if(i==0) {
System.out.println("Goldbach's conjecture is wrong."); //wenn kein Primzhalzwillig gefunden wird, wird diese meldung ausgegeben
}
}


}

}

}


4.


/**
* Angewandte Mathematik, SS09, IFB 2C
* ACM Problem 543 - Goldbach's Conjecture
* Link: http://icpcres.ecs.baylor.edu/onlinejudge/index.php?option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=484
* @author Miesel Christoph
* @author Seilbeck Robert
* @author Wolfram Andre
* @version 1.0 25.03.2009
*
* Status : Accepted
* Runtime: 2.210
*/


import java.io.*;
import java.util.Scanner;

public class Main {

static boolean primzahltest(int aNumber)
{
boolean isPrim = true;
if(aNumber==2) isPrim = true;
else
{
double limit = Math.sqrt(aNumber);
if(aNumber%2==0) isPrim = false;
for(int i = 3; i<=limit; i+=2)
{
if(aNumber%i==0) isPrim = false;
}
}
return isPrim;
}

public static void main(String[] args) throws Exception
{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
int input;
String result = null;
input = Integer.parseInt(line);

while(input != 0 && input <= 1000000 && input >= 6 && input % 2 == 0)
{
for(int i = 3; i<=input/2; i += 2)
{
if(primzahltest(i)&&primzahltest(input-i))
{
result = input+" = "+i+" + "+(input-i);
break;
}

}
if(result == null) System.out.println("Goldbach's conjecture is wrong.");
else System.out.println(result);
line = reader.readLine();
input = Integer.parseInt(line);
result = null;

}
}

}

5.

import java.io.InputStreamReader;
import java.io.BufferedReader;
//import java.util.*;

public class GoldbachConjecture {

/**
* Probem: 543
* @author: Johannes Mueller
* @author: Markus Stadler
* Status:
* Runtime:
*/
public static void main(String[] args) throws Exception {

//Read inputstream from System.in
BufferedReader buin = new BufferedReader(new InputStreamReader(System.in));

int line = Integer.parseInt(buin.readLine());
while(line != 0) {
if(line <= 4)
continue;

if(line == 0 | line < 4) // Reached the first 0, break the loop
break;

//here the prog

// gernerate primer numbers
int foo = 3; // we start with 2
int i = line - foo; // i is the counterpart of foo -> foo + i equals input number
int halfInput = line / 2;
while (foo <= halfInput) {
int number = line - i;
if (isPrim(i) && isPrim(number)) {
System.out.println(line + " = " + number + " + " + i);
break;
}
foo += 2;
i -= 2;
}
line = Integer.parseInt(buin.readLine());
}

}

/**
* Checks if the given number is prime or not
* @param i the number which you want to check
* @return boolean true or false
*/
public static boolean isPrim(int i) {
int sqrt = (int)Math.sqrt(i);
if (i%2 == 0)
return false;
for (int k = 3; k <= sqrt; k += 2) {
if (i%k == 0) {
return false;
}
}
return true;
}

}