Problem 12: Höchst teilbare Dreieckszahl

Gesucht wird die kleinste Dreieckszahl, die mehr als 500 ganzzahlige Teiler hat! [das englische Original]

Die Lösung dieses Problem ist recht trivial mit 2 Schleifen geschrieben. Es ist erstaunlich, wie schnell man die gesuchte Lösung findet:

@Override
public String solve() {

   long divs, upper, lower;
   long number = 1, sum = 0;

   do {
      sum += number++;

      divs = 2;
      lower = 2;
      upper = ( int ) sum / lower;

      IO.debug( "check " + sum + ": 1" );
      while( lower < upper ) {
         if( sum % lower == 0 ) {
            upper = sum / lower;
            divs += ( lower == upper ) ? 1 : 2;
            IO.debug( ", " + lower + ", " + upper );
         }
         lower++;
      }
      IO.debugln( ", " + sum + " -> " + divs + " divisors" );
   }while( divs < 500 );

   return IO.l2s( sum );
}

Den vollständigen Quellcode der Klasse für die Lösung des Problems 12 kann man sich hier anschauen!

<< Problem 11 Übersicht Problem 13 >>

Kommentar verfassen

Willkommen in Nico Dannebergs Netzwerk

%d Bloggern gefällt das: