0 Daumen
963 Aufrufe

Ich optimiere gerade die exakte Berechnung von 3 hoch x mit x >400 Mio.  


(also nicht die näherungsweise Exponentialschreibweise  


2.32780773941357395111974554861... e192114392

mod N = .... 839220489793152197358907494687047681 <--- letzte Stellen

sondern jede einzelne Ziffer in Form einer {oder mehrerer} unverschlüsselten Datei(en)  wie z.B. .txt )  


Es gibt viele LINKs (BigInt, BigNum, BigAl usw.) die praktisch jedoch an der physikalischen Machbarkeit (zu wenig RAM-Speicher; Rechenzeit > 10 Jahre usw.) scheitern.


Mathematica ist eines der teuersten Programme und soll doch so schnell sein...


Hat das jemand -> und wenn JA, wie lange braucht es praktisch


für 3^402653184 = pow(3 , 402653184) ?


Danke.

Avatar von 5,7 k

1 Antwort

+1 Daumen
 
Beste Antwort

rund drei Minuten Rechenzeit auf einem nicht ganz alten, nicht ganz neuen PC, und dann noch ein paar Minuten, um alle Ziffern des Ergebnisses über den Bildschirm rasen zu lassen

Avatar von 45 k

Deine Werte scheinen mir realistischer, denn jemand anders antwortete mir:

"3.5s aber es vergehen ca. 120s bis zur verkuerzten Anzeige" (mit i7 8Kerne-Vollversion).

Darf ich nach der verwendeten CPU fragen (mit den Tasten  WINDOWS + Pause steht unter System der CPU Name )

und welche Ma.-Version? (Profi für 8 Kerne oder Studenten für 4 Kerne?)


Wenn Du mir noch antwortest, wie lange

pow(3,1207959552) braucht

{mein i7  3770K 3.5GHz schafft mit eigener c++ Optimierung in etwa 1 min mit Speicherung als txt-Datei}

und was Mathematica bei

floor((3^17716740096)/10^7684575837) mod 10^40

antwortet, bekommst Du sofort den Stern für beste Antwort.

{mit diesen 40 Stellen kann ich mein Ergebnis überprüfen}

Mma 10 auf einer Quadcore-CPU Q9550 mit 2,8 GHz, aber verwendet wurde nur 1 Kern. Wenn ich den Output unterdrücke, geht es auch bei mir schneller, nämlich ca. 9 bzw. 27 Sekunden:

In[1]:= Timing[3^1207959552;]

Out[1]= {27.7682, Null}

In[2]:= Timing[3^402653184;]

Out[2]= {9.65646, Null}

In[3]:= Mod[Floor[3^17716740096/10^7684575837],10^40]

...und es rechnet noch.

....die dritte Aufgabe hat mein Mathematica dreimal hintereinander zum Absturz gebracht.

"Absturz" -> hab ich's mir fast gedacht :-)

Das Timing[...] ist nur virtuelles Rechnen.

Entscheidend ist die Zeit, bis die Datei fertig geschrieben ist.

(nur so kann man unterschiedliche Programme vergleichen)

Die letzte Aufgabe kann Mathematica nicht abkürzen (wie man es bei den vorderen oder letzten Stellen kann), sondern muss richtig rechnen -> und das braucht viel RAM. (hast Du zu wenig?)

Das Kopieren von mittleren Stellen könnte man auch per String-Funktionen realisieren:

Substr(317716740096).toString(),8453033265-7684575837 , 40)

oder einfach aus der Mitte der txt Datei 40 Stellen kopieren... (kommt nicht auf genauen Offset an)

Hier http://www.gerdlamprecht.de/BisZuWelcherNKalleStringKombi.htm

meine Ergebnisse in der Tabelle unten (natürlich rechne ich bei den großen mit geteilten txt, da diese großen Zahlen nicht mehr in den RAM passen!)

ich habe 8 GB

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community