001    package de.hska.java.aufgaben.kontrollstrukturen;
002    
003    import de.hska.java.aufgaben.rekursion.Primzahl;
004    
005    /**
006     * Berechnet alle Giuga-Zahlen bis zu einer vorgegebenen Grenze.
007     * Eine natürliche Zahl z ist eine Giuga-Zahl, wenn
008     * alle Primteiler p von z die Zahl z/p - 1 teilen.
009     * 
010     * <p>
011     *   <a href="http://www.home.hs-karlsruhe.de/~pach0003/informatik_1/aufgaben/kontrollanweisungen.html#giuga">Zurück zum Aufgabentext</a>
012     * </p>
013     * @author Christian Pape
014     *
015     */
016    public class GiugaZahl {
017    
018        /**
019         * Berechnet alle Giuga-Zahlen bis zu einer festen Obergrenze.
020         */
021        public static void main(String[] args) {
022            final int n = 1000;
023            Primzahlsieb sieb = new Primzahlsieb(n);
024    
025            sieb.primzahlenBerechnen();
026            for (int zahl = 2; zahl <= n; zahl++) {
027                boolean giuga = true;
028                for (int primzahl = 2; primzahl <= zahl && giuga; primzahl++) {
029                    if (sieb.isPrim(primzahl) && zahl % primzahl == 0) {
030                        giuga = (((zahl / primzahl) - 1) % primzahl) == 0;
031                    }
032                }
033                if (giuga) {
034                    System.out.println(zahl + " ist eine Giuga-Zahl");
035                } else {
036                    System.out.println(zahl + " ist keine Giuga-Zahl");
037                }
038            }
039       }
040    
041    }