Problem 56: Mächtige Quersummen

Gesucht wird die größte Quersumme einer Potenz zwischen 11 und 100100! [das englische Original]

Auch dieses Problem ist durch die Wiederverwendung der Klasse für große Zahlen recht einfach zu lösen. Mit zwei geschachtelten Schleifen kann man die 10.000 Potenzen berechnen und die resultierenden Quersummen gegen das bisher gefundene Maximum prüfen. Wichtig ist dabei nur, dass man in der inneren Schleife nicht jede Potenz von neuem berechnet, sondern einfach auf das bestehende Produkt multipliziert:

@Override
public String solve() {

   LargeNumber max = new LargeNumber( 1 );

   for( int a = 1; a < 100; a++ ) {
      LargeNumber lA = new LargeNumber( a );
      LargeNumber cur = lA.clone();

      for( int b = 1; b < 100; b++ ) {
         LargeNumber sum = cur.sumOfDigits();
         if( max.compareTo( sum ) == -1 ) {
            IO.debugln( "found new max = " + sum + " for " + a + "^" + b );
            max = sum;
         }
         cur = cur.mult( lA );
      }
   }

   return max.toString();
}

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

<< Problem 55 Übersicht Problem 57 >>

Willkommen in Nico Dannebergs Netzwerk

%d Bloggern gefällt das: