Primzahlen effizient berechnen

Fragen zu mathematischen Problemen
Antworten
Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Primzahlen effizient berechnen

Beitrag von Dirty Oerti » Mi Sep 16, 2009 8:11 pm

Tag :)

(Seit wann haben wir ein Mathe-Forum?^^)

Was ich mich frage: Wie berechne ich Primzahlen möglichst effizient?
Im Moment mache ich das folgendermaßen:

Ich überprüfe alle Zahlen von 2 bis sqrt(Zahl), ob sie ein Teiler von Zahl sind.
Finde ich einen Teiler, dann ist Zahl keine Primzahl.

Das Ganze nun in eine for-Schleife gepackt, Start- und Endwerte mitgeben und durchlaufen lassen.
Funktioniert, ist aber doch schon recht aufwendig bei größeren Zahlen.

Was ich jetzt auch noch so für möglich halte ist folgendes:

Es werden alle Primzahlen von 2 aufwärts in einen Vector gespeichert. Somit muss eine Zahl nur daraufhin getestet werden, ob sie durch eine der (schon bekannten) Primzahlen teilbar ist.
Wenn ja, dann ist es keine Primzahl (da es ja dann ein Vielfaches einer anderen Primzahl ist). Ansonsten kommt die Zahl in den Vector mit rein. Die Zahl+1 braucht dann nicht einmal überprüft werden, da die dann durch 2 teilbar ist (mal von der Primzahl 2 abgesehen). Das Spielchen so lange, bis man eine Zahl größer als dem Startwert gefunden hat oder bis die Zahl größer wird, als der Endwert.

Fällt euch noch etwas schnelleres ein?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Primzahlen effizient berechnen

Beitrag von Kerli » Mi Sep 16, 2009 10:15 pm

Dirty Oerti hat geschrieben:Was ich mich frage: Wie berechne ich Primzahlen möglichst effizient?
Was willst du denn für Primzahlen? Ist es nur wichtig, dass es eine Primzahl ist, oder möchtest du alle Primzahlen in einem bestimmten Intervall bekommen?
Dafür kannst du erstens einmal hier hin schauen. Und für alle Primzahlen bis zu einer gewissen Zahl kann ich dir noch das Sieb des Eratosthenes empfehlen. Das funktioniert eh so ähnlich wie du beschrieben hast, nur genau umgekehrt, in dem alle Zahlen in einem Intervall, die sicher keine Primzahlen sind gestrichen werden (dh. alle Vielfachen v. Primzahlen) und somit am Ende nur Primzahlen übrig bleiben.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten