import Prog1Tools.IOTools;
public class BinS  //Name muss gleich Dateinamen sein!!
                         // Hier das Finden der ganzzahligen Wurzel durch
			 // binaere Suche. 
{
  public static void main(String[] args)
  {
   long n, a ,b, c, d; 
   n =  IOTools.readLong("Einlesen eines langen n >= 0 zum Test "+
                         "der ganzzahligen Wurzel  " );
   a = 0;
   b= n+1;
   d = 0;
   //
   //
   //
   while (a+1 < b)  // Vielleicht besser ob a+1 =! b??
                    // a+1 < b bedeutet, dass b - a > 2.
                     // Invariante: Die ganzzahlige Wurzel w erfuellt 
		      // immer  a_l <= w < b_l.
		     // Quintessenz: Ist a_l + 1 = b, dann ist 
		     // also wegen der Invariante w = a_l.   
   {
     d = (b-a)/2;
     System.out.println("d = " +d);
     if ((a + d)*(a+d) <= n )    //Exponentiation ist so noch nicht dabei!!
      {                          // Deshalb das Multiplizieren.     
        a = a + d;
        //System.out.println("a = " +a);
       }
     if ((b - d)*(b-d) > n)
     {
      b = b - d;
      //System.out.println("b= "+ b);
     }     
   }
   //System.out.println("a, b, d = " + "  "+ a +"  " + " "+ b +" "+ d );
   //System.out.println("Die Schleife ist fertig mit ordentlichen " + a +
   //" als ganzzahlige Wurzel von " + n);
   //
   c = a * a;
   d = (a+1)*(a+1);
   System.out.println("Machen wir zur Sicherheit die Probe a * a = " +c +
                       " und (a+1)*(a+1) = " + d);
   }
  }                   
   
