Seite 1 von 1

Primzahlen effizient berechnen

Verfasst: Mi Sep 16, 2009 8:11 pm
von Dirty Oerti
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?

Re: Primzahlen effizient berechnen

Verfasst: Mi Sep 16, 2009 10:15 pm
von Kerli
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.