import Prog1Tools.IOTools;
public class Eukl //Name muss gleich Dateinamen sein!!
                  // Berechnet den ggT von zwei Zahlen >=2
		  // nach dem Prinzip von Euklid.  
{                        
  public static void main(String[] args)
  {
   long g ,h,  gein, hein; 
   g =  IOTools.readLong("Einlesen eines langen g >= 2 zum Test:" );
   h =  IOTools.readLong("Einlesen eines langen h >= 2 zum Test:" );
   System.out.println("   ");
   System.out.println("ggT( " + g + " , " + h + " ) soll ermittelt werden.");
   System.out.println ("   ");
   gein = g;
   hein = h;
                           // Initialisierung beendet. 
   while  (g > 0 & h > 0)     // Schleife endet, wenn einer der Werte
                              // gleich 0 ist. Der andere ist der ggT.
                              //
			      // Invariante: Gemeinsame Teiler von
			      // g_0 und h_0 gleich gemeinsame Teiler
			      // von g_l und h_l. 
                               // Quintessenz: Ist g_l=0 dann ist die 
			       // Teilermenge von h_l die Menge der
			       // gemeinsamen Teiler, also h_l der ggT.
			        // Ebenso umgekehrt, bei h_l = 0. 
   {
      if (( g > h )&( h >0)) 
      { 
      g = g % h;           // Hier kann die 0 auftreten.
      }
      if ((0 < g) & (g < h))  // Fehlt der 0-Test kriegen wir bei 
                              // Eingabe 30 und 31 eine Division durch 0.
			      // Wieso?
      {
       h = h % g;          // Auch hier ist die 0 moeglich. 
      }
  }  
    System.out.println("Der ggT von "+ gein + " und " + hein + 
    " ist entweder g = " + g + "oder  h = " + h);
   }
 }     
   
  
