große Zahlen
-
Moin,
ich habe vor, ein programm zu schreiben, das mir sehr große primzahlen ausgeben soll.
Sehr groß heißt in meinem Fall Zahlen im bereich von 2^ 8000 bis 2^ 9000.
Kann ein Programm so große Zahlen überhaupt noch verarbeiten, und wenn ja, wie funktioniert das ?
long int oder unsigned int wird hier ja wahrscheinlich nicht funktionieren.
Es muss doch irgendwie möglich sein, diese großen Zahlen irgendwie in einem programm zu benutzen.Allein schon desshalb, weil es immer wieder "primzahlrekorde" gibt und immer größere Primzahlen durch Programme entdeckt werden.Vieleicht kann mit ja jemand weiter helfen
Danke
Wiesel
-
erster treffer bei google: https://sourceforge.net/projects/cpp-bigint/
-
2^9000
heilige Scheisse oO
-
2^9000
heilige Scheisse oO
der bisherige rekord liegt bei 2^ 232582657-1... also noch viel höher als 2 ^ 8000 :p
-
klappts denn?
-
Krux schrieb:
klappts denn?
ich weiß nicht genau, was ich jetzt machen muss...
ich habe das teil runtergeladen und die .exe ausgeführt. Kann ich jetzt automatisch größere Integer-zahlen deklarieren ?
-
Nene, das geht anders
Da sind wahrscheinlich ein paar .cpp und .h Dateien dabei. Die musst du in dein Projekt einbinden.
Wenn da z.B. eine Klasse "BigInt" oder so in den Dateien ist, musst du die zugehörige Header-Datei (.h) mit #include einbinden (überall da, wo du die Klasse benutzen willst) und die .cpp-Datei davon muss mit kompiliert werden, musst du irgendwie bei deiner IDE mit in das Projekt aufnehmen
-
da ist nur eine .exe und keine anderen dateien....
trotzdem schonmal danke für die Hilfe
-
du hast das falsche paket heruntergeladen, mit der exe kannst du garnichts anfangen, du musst eins der src pakete herunterladen, hier ist mal ein beispiel, wie dann der Quellcode deiner main aussehen könnte:
#include "bigint.h" int main(void){ VinBigInt a(1),b(1),tmp; for(int i = 0; i < 1000; i++){ tmp = a; a = b; b = tmp + a; cout << tmp << endl; } }
dieses Programm gibt die ersten 1000 fibonaccizahlen aus, ich hab es schon getestet, du kannst es also als anwendungsbeispiel sehen.
-
arg, hab mich nur wegen dieser frage hier angemeldet....
also ich hab jetzt eine kleine funktion geschrieben die mir sagt, wieviel ziffern eine integer zahl hat.
int ziffern(int zahl) { int ziffern=1; VinBigInt cntr(1); while (zahl > cntr * 10) { cntr=cntr*10; ziffern++; } return ziffern; }
aber mein Dev-C++ version 4.9.9.2 sagt mir
no match for 'operator>' in 'zahl > VinBigInt::operator*(ulong) const(10u)'
was ich ihm irgendwie nicht so richtig glauben kann...
ich hab auch schon probiert, die zahlen 1 und 10 ebenfalls als VinBigInt zu deklarieren a laint ziffern(int zahl) { int ziffern=1; VinBigInt a(1),b(10),cntr; cntr = a; while (zahl > cntr * b) { cntr=cntr*b; ziffern++; } return ziffern; }
aber devc++ sagt mir im grunde genommen das gleiche:
no match for 'operator*' in 'tmp * b'
das gleiche übrigens auch für die anweisung cntr=cntr*b;
also für mich sieht das so aus, als ob der multiply operator * nicht für VinBigInt vars vorgesehen ist, was ich aber irgendwie nicht glauben kann....
ich danke für hilfe
ps: dass es evtl ne simplere lösung für diese funktion gibt ist mir erstmal egal. ich will nur diese BigInts zum laufen bekommen
[edit][OT]ich seh grad, man muss sich gar nicht anmelden, um beiträge zu erstellen.....naja, schadet ja nicht =)[/OT][/edit]
-
Du wirst aus "zahl" wohl auch einen "VinBigInt" machen müssen.
-
dank'schön, aber
VinBigInt dezimal(909093804530);
integer constant is too large for "long" type
--> hmm?
und kann man irgendwie input eingaben für VinBigInt benutzen?
und bei einer anweisung wie
cntr=cntr*b;
kommt ebenfalls ne fehlermeldung ("no match for 'operator*' in 'cntr*b'"), obwohl sowohl cntr als auch b als VinBigInt deklariert sind...
scheint als könnte man damit nur plus und minus rechnen....greetz
-
So, hier bin ich wieder.
Irgendwie habe ich das problem, dass ich keine große zahlen mit dieser klasse aus dem ersten link MULTIPLIZIEREN und DIVIDIEREN kann. Addieren und subtrahieren funktioniert.
Könnte jemand für mich ein kleines Beispiel machen ?
Danke
-
vlt willst du dir auch GNU MP anschauen,das hat auch c++ bindings. und ist eig DIE bignum lib da draussen
-
geht das ganze nicht auch irgentwie ohne die exe?