Ich schreibe sie Manuell dazu. Das ist nur eine Zahl die hinzugefügt werden muss und dafür wird der Speicherbedarf halbiert und die Rechenzeit merklich verkürzt.
Das die Ausgabe mit cout sehr Zeitraubend ist ist mir auch aufgefallen, ich gebe die Zahlen daher in einem extra Thread aus, und nicht mit cout sondern mit fprint immer in 4096 Byte Blöcken in eine Datei (im Idealfall Clustergröße der Festplatte --> höchstmögliche Geschwindigkeit). Allerdings gibt mein gepostetes Programm die Zahlen Binär, also immer 4 Byte lang aus. Das spart nicht nur Rechenzeit sondern auch Speicherplatz.
Hier mal ein Vergleich zwischen meiner jetzigen Ausgabe und der Ausgabe mit cout bzw. einem fstream: Die Speicherrate vorher waren ein paar MB/s (ca. 4-5 MB/s), jetzt ist es wirklich die maximale Schreibgeschwindigkeit meiner Festplatte (ca. 80MB/s). Da ist also auch noch viel Spielraum zum optimieren des Algorithmus.
Noch ein Tipp: Wenn du doch cout nimmst dann benutze nicht immer std::endl als Zeilenumbruch weil das zu einem flush führt, also den Buffer leert. Es ist manchmal sinnvoll nur \n als Zeilenumbruch anzufügen weil die Daten dann in den Buffer geschrieben werden. Das geht wesentlich schneller als immer jede Zeile einzeln auszugeben.