001    package de.hska.java.aufgaben.kontrollstrukturen;
002    
003    /**
004     * Überprüft die Goldbachsche Vermutung mit einem brute-force Verfahren.
005     *
006     * <p>
007     *   <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/kontrollanweisungen.html#goldbach">Zurück zum Aufgabentext</a>
008     * </p>
009     * @author Christian Pape
010     *
011     */
012    public class GoldbachscheVermutung {
013    
014        private Primzahlsieb primzahlsieb;
015        
016        private int n;
017        
018        public GoldbachscheVermutung(int n) {
019            primzahlsieb = new Primzahlsieb(n);
020            this.n = n;
021        }
022        
023        /**
024         * Überprüft die Goldbachsche Vermutung, indem für jede Zahl z
025         * potentiell alle Kombinationen von Primzahlen p1,p2 < z ausprobiert werden.
026         */
027        public void vermutungUeberpruefen() {
028            primzahlsieb.primzahlenBerechnen();
029            
030            for (int zahl = 4; zahl <= n; zahl += 2) {
031                System.out.print(zahl + " überprüfen:");
032                primzahlPaarSuchen:
033                for (int p1 = 2; p1 < zahl; p1++) {
034                    for (int p2 = 2; p1 + p2 <= zahl; p2++) {
035                        if ( primzahlsieb.isPrim(p1)
036                                && primzahlsieb.isPrim(p2) ) {
037                            if (p1 + p2 == zahl) {
038                                System.out.println(zahl + " = " + p1 + " + " + p2);
039                                break primzahlPaarSuchen;
040                            }
041                        }         
042                    }
043                }            
044            }
045        }
046        
047        public static void main(String [] argv) {
048            GoldbachscheVermutung vermutung = new GoldbachscheVermutung(10000);
049            vermutung.vermutungUeberpruefen();
050        }
051    }