/*
Datei............: Aufg0428.java
Projekt..........: Einführung in die Java-Programmierung
Erstellt.........: 04.10.97, Guido Krüger
Geändert.........: --
Aufgabe..........: Musterlösung zu Aufgabe 04.28
Kommentare.......:

Ob eine Zahl n "perfekt" ist, oder nicht, läßt sich leicht mit einer
for-Schleife überprüfen, die von 1 bis n - 1 läuft und alle
Schleifenwerte addiert. Stimmt die Summe am Ende der Schleife mit der
ursprünglichen Zahl überein, war diese "perfekt", andernfalls
nicht. 

Das folgende Programm verwendet eben dieses Verfahren, um vom Anwender
eingegebene Ganzzahlen auf ihre "Perfektion" zu testen. Nach
beenden der Hauptschleife durch Eingabe von 0 werden noch schnell
alle "perfekten" Zahlen zwischen 1 und 1000 bestimmt (viele sind's
nicht). 

Leider hat dieser sehr einfache Algorithmus quadratische Laufzeit und
ist daher zur Bestimmung großer "perfekter" Zahlen kaum geeignet,
wenn man nicht gerade eine Cray Zuhause stehen hat. Welches ist die
vierte perfekte Zahl, welches die fünfte?. Kennt jemand einen 
Algorithmus mit besserer Laufzeit? Her damit :-)
*/
import java.io.*;

public class Aufg0428
{
  public static void main(String args[])
  {
    BufferedReader din = new BufferedReader(
			 new InputStreamReader(System.in));
    int number;

    //Dialogmodus
    while (true) {
      System.out.print("Bitte eine positive Ganzzahl eingeben (0=Ende): ");
      try {
	number = Integer.parseInt(din.readLine());
	if (number == 0) {
	  break;
	} else if (number > 0) {
	  int sum = 0;
	  for (int i = 1; i < number; ++i) {
	    sum += (number % i == 0) ? i : 0;
	  }
	  String result = "  Die Zahl " + number + " ist ";
	  result += (sum == number ? "" : "nicht ") + "perfekt.";
	  System.out.println(result);
	}
      } catch (IOException e) {
	System.out.println("  Fehler beim Lesen der Eingabe");
      }
    }
    //Berechnen aller perfekten Zahlen kleinergleich 1000
    System.out.println("---");
    for (number = 1; number <= 1000; ++number) {
      int sum = 0;
      for (int i = 1; i < number; ++i) {
	sum += (number % i == 0) ? i : 0;
      }
      if (sum == number) {
	System.out.println("Perfekt: " + number);
      }
    }

  }
}

