Da 10^7 < 16000000 < 10^8 hat diese Zahl wegen (10^7)^786432 = 10^5505024 < (10^8 )^765432 = 10^6291456 also irgendwas zwischen 5505024 und 6291456 Stellen.
Man kann mit z.B. Java zwar solch riesige Zahlen berechnen, jedoch dauert das dermaßen lange, dass es Sinn macht, zuvor etwas Gehirnschmalz zu investieren, um die Berechnung abzukürzen:
Die Berechnung läßt sich etwas vereinfachen:
a) Wegen 16000000 = 16*10^6 läßt sich der zu berechnende Wert auseinanderziehen zu 16^786432 * (10^6)^786432 = 16^786432 * 10^4718592.
=> Die gesuchte Zahl ist also in Dezimaldarstellung 16^786432 gefolgt von genau 4718592 Nullen. Letztere braucht man also während der Berechnung nicht zu beachten, da sie zudem nur extrem viel Rechenzeit ziehen.
b) Da aber selbst die Berechnung von 16^786432 noch lange dauert, vereinfachen wir noch weiter:
Wegen 16 = 2^4 ist somit 16^786432 = 2^3145728.
Binär dargestellt ist 16^786432 also eine 1 gefolgt von 3145728 Nullen.
Somit läßt sich 16^786432 erzeugen durch eine 1, welche um 3145728 Stellen nach links geshiftet wird. Das Shiften geht nahezu ohne Zeitaufwand.
Insgesamt liefert somit folgendes Java-Programm die gesuchte Zahl ohne die folgenden Nullen:
Code: Alles auswählen
import java.math.*;
import java.io.*;
public class MegaZahl {
public static void main (String [] args) throws IOException
{
BigInteger x = BigInteger.valueOf(1);
x = x.shiftLeft(3145728);
System.out.println("value calculated. Write decimal value to file.");
FileWriter f = new FileWriter(new File("C:\\MegaZahl.txt"));
f.write(x.toString());
System.out.println("value written to file. End");
f.close();
}
}
Das Wandeln der Zahl in einen Dezimalzahl-String dauerte dabei etwa 15 Minuten und liefert folgende Zahl:
MegaZahl.txt (947kB)
... mit 946959 Stellen, an welche nun noch 4718592 Nullen angehängt werden müssen. Insgesamt hat die Zahl also 5665551 Stellen.
Für das Rechnen mit beliebig großen Zahlen gibt es glaube ich auch für PB eine Lib? Schau dafür mal auf Purearea.