"We are back" « oc.at

Zahl mit 10 mio-ziffern in c\c++

fresserettich 06.01.2004 - 22:22 10436 110 Thread rating
Posts

fresserettich

Here to stay
Registered: Jul 2002
Location: hier
Posts: 5478
genau das soll ja des int-array machen
@atrox
genau das meine ich auch
ein guter algo steht auf der hp wo du den link gepostet hast eine optimierte version davon nutzt auch gpis und die haben auch die letzten primzahlen geknackt (der ist jedoch nicht so besonders schnell)
nur wenn wir den selben benutzen dann sind mir mit sicherheit 2ter weil die einfach viel mehr nutzer haben
wenn ich in zimmski richtig verstanden habe hätte er eine effiziente lösung das problem ist nur bis wir mal starten können würde imho ziemlich viel zeit vergehen

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Ihr meint, ihr habt einen schnelleren Algorithmus als auf http://www.mersenne.org ? Interessant...

Deren Zeug ist so krank optimiert und getuned, da muss einem schon was sehr geniales einfallen, damit man noch schneller wird.

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
mersenne-primzahlen sind ja auch ein spezialfall - dafür gelten eigene gesetze (siehe mein post mit dem wikipedia link)- die die arbeit wesentlich erleichtern im vergleich zu allgemeinen primzahlen.

es könnte also durchaus nicht falsch sein, sich den gimps-clientcode herzunehmen, und ihn so umzubauen, daß er speziell nach M-zahlen > 10^(10^7) sucht.

zimmski

Bloody Newbie
Registered: Jan 2004
Location: ask me
Posts: 13
ich hab nicht behauptet das es schnellere als andere algos ist... aber ich hab mir hald dass noch dazu überlegt:

also wenn man herausfinden will ob eine zahl ein primzahl ist muss man sie durch alle anderen primzahlen dividieren welche kleiner als sie ist...

dann gibts noch ne kleine verbesserung das man einfach nur di hälft von den primzahlen nimmt und sogar ein drittel geht auch noch....

so ich hab mir aber was anderes überlegt .. wenn man sich schnell eine primzahl tabelle mach in excel und dann noch di hochrechnungswerte bis hoch 4 hinschreibt... kann man herausfinden das man zahlen bis 3000 nur mit 2,3,5,7,11,13..57, 59 wenn ich mich nicht verrechnet habe.. und mehr sind das nicht... wenn wir jetzt einfach eine tabelle machen mit allen hochgerechneten primzahlen di mehr als 10mil zeichen haben müssen wir nichtmehr dividieren sondern müssen nur noch vergleichen .. und das geht ja schneller das gibts nämlich auch noch ein paar tricks..... versteht ihr was ich meine?

:fresserettich: jamjamjam

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Alles kein Problem! :D

Weißt du eh, wie viele solche Zahlen es gibt? Die Anzahl der Atome im Universum ist winzig verglichen mit der Anzahl derartiger Primzahlen...

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
bin mir bei deinem text jetzt nicht bei allen punkten sicher was du meinst, es ist natürlich klar, daß du, wenn du eine zahl n prüfen willst, nicht durch alle primzahlenzahlen [2..n] dividieren mußt, sondern nur durch [2..√n]

es gibt eine formel, die dir hilft abzuschätzen, mit wievielen primzahlen du es zu tun haben wirst: http://www.mathpages.com/home/kmath032.htm

fresserettich

Here to stay
Registered: Jul 2002
Location: hier
Posts: 5478
ich glaube dass in zimmski sein algo schneller ist aber nur bis der algo mal lauffähig ist dauert seine zeit und zimmski bedenke folgendes es gibt keine garantie dass es eine zahl mit 10 mio stellen gibt sie kann auch größer sein

Geigerzeiger

Addicted
Registered: Jan 2004
Location: anywhere
Posts: 449
wie wär es wenn wir so eine art benchmark realisieren, der 8moi stellige primzahlen berechnet.
Der algorithmus wär eh nicht so schlecht

zimmski

Bloody Newbie
Registered: Jan 2004
Location: ask me
Posts: 13
ok i erklärs nochmal kurz wie meine idee ist.. zuerst macht mal meinen anhang auf.. da is ne liste mit primzahlen und hochrechnungen... jez rechnen wir einfach alle primzahlen di benötigt werden auf ne zahl di mehr als 10mil stellen hat.... damit kann man dann di zahl vergleichen und vergleichen geht verdammt schnell und wenn man einmal eine liste hat mit solchen zahlen kann man ja falls notwendig si noch ein bischen erweitertn also zB wenn man 2hoch irgendwas für 11mil stellen braucht einfach solange mit 2 mulitplizieren bis man 11mil stellen hat...

und i schätz schon das mindestens EINE primzahl gibt di 10 mil stellen hat..
liste_45888.gif (downloaded 75x)

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
ich stehe jetzt irgendwie auf der leitung - aber versuchen wir es mit einem einfachen beispiel: nehmen wir an, ich suche eine primzahl mit 5 oder mehr stellen, wie gehe ich da laut deiner tabelle vor?

und wie verifizierst du die erste spalte der tabelle ohne zu dividieren ?
und wird die tabelle nicht sehr schnell irsinnig groß, wenn jede zahl darin mehrere megabyte groß ist ?
und: wenn ich eine primzahl mit irgendwas multipliziere, ist sie keine primzahl mehr - was hab ich übersehen ?

fresserettich

Here to stay
Registered: Jul 2002
Location: hier
Posts: 5478
ok ich machs mit einem ganz einfachen beispiel:
es soll überprüft werden ob die zahl 16 und 17 eine primzahl ist:
man weiß 2 ist eine primzahl also rechnet man 2*2=4 usw. des gleiche bei 3 für 5 ,...
alle diese ergebnisse stehen in einer liste:
man fängt an mit diesen wertern zu vergleichen dann wirst du feststellen dass 16 eine form von 2 * n ist --> keine primzahl
17 wirst du nicht finden also ist es eine primzahl
ich sagte ja der algo braucht verdammt viel ressourcen und es ist ein langer weg bis man sie hat aber dann ist er verdammt schnell
man kann ja noch ein bisschen optimieren
ich hoffe es ist jetzt klar

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Ist 6 dann auch eine Primzahl? Es ist ja weder 2*2 noch 3*3.

zimmski

Bloody Newbie
Registered: Jan 2004
Location: ask me
Posts: 13
nein. 6 ist nur eine hochrechnung von 2. also is 2 der teiler. ergo nix primzahl.....

ich mein wenn man so ne tabelle mach dann geht hald für ne zahl 11mb drauf.. mir egal der speicherverbrauch ist mir echt wurst! hauptsache es geht schnell.. und di tabelle fangt ja erst bei zahlen mit 10mil stellen an...sollte sie zumindest

SoulFly

Bloody Newbie
Registered: Jan 2004
Location: Krenglbeach City
Posts: 14
so ... ich arbeite an dem ganzen auch mit (ich bin für den server zuständig) ...

und da hab ich mir gestern überlegt wie man einen zahl mit 11 mil. stellen an einen client versenden kann:

mhm ... es gibt 2 wege ...

1. Binär: 4,6 Mb (zu groß für eine 56k Leitung)
2. String: 11 Mb (auch zu groß ...)

frustriert hab ich das verworfen und hab ein bisschen mit einer zip library gespielt und als ich fertig war, hab ich zum testen die txt datei verpackt die 11mb hatte ... und siehe da: die zip ist 27,1 KiloByte groß! :) ... ich zip die textfile einfach und versende sie dann *äähää* ... und der client - für den ich auch wahrscheinlich zuständig bin (wer sonst kann schon meine librarys benutzen) - muss das teil wieder entpacken ...

ich hab mir dann ein paar zip libraries besorgt und deren packungs geschwindigkeit berechnet:

-- addZIP (die allererste version): 1 Sekunde und 30 MlSec
-- BSZip: 2 Sekunden irgendwas
-- QuickZip: 3 Sekunden und 50 MlSec

ich nehm jetzt die addZIP und führe damit ein paar tests durch ...

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11343
Zitat von zimmski
ich mein wenn man so ne tabelle mach dann geht hald für ne zahl 11mb drauf.. mir egal der speicherverbrauch ist mir echt wurst! hauptsache es geht schnell.. und di tabelle fangt ja erst bei zahlen mit 10mil stellen an...sollte sie zumindest

Es gibt rund 10^10000000 Zahlen mit 10 Millionen Stellen. Wenn du davon auch nur 0,1% in einer Tabelle speichern willst, viel Glück.
Sogar ein Yottabyte wäre "nur" 10^24 (also eine Billion Terabyte), und darüber gibts nichtmal mehr Worte für die Einheiten. Zum Vergleich: Die Datenbank von Google hat angeblich ca. 2 Petabyte.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz