Primzahl-Aufgabe
-
Man gibt eine Zahl ein und es wird angezeigt ob dies eine Primzahl ist. Dabei soll so viel! wie möglich unnötige Rechenarbeit gespart werden. man kann sich das so vorstellen, dass das programm dann bei einem PC mit 10 MHz Prozessor ruckelfrei läuft^^. Kann mir jemand einen Algorithmus oder den Quellcode aufschreiben?
nimm eine vorberechnete, sortierte primzahlenliste
-
Eine andere Möglichkeit zu Berechnung von Primzahlen ist folgende:
if( ( (primzahl*primzahl) %24 ) == 1 ) { return true; //Ist eine Primzahl } else{ return false;//Ist keine Primzahl }
-
Hallo,
ich weiß nicht ob ichs richtig verstanden habe, aber wenn man dort zb. 3 einsetzt kommt 9$ raus und das ergibt 9. 3 ist aber eine Primzahle.
MFG toddy
-
Toddy schrieb:
Hallo,
ich weiß nicht ob ichs richtig verstanden habe, aber wenn man dort zb. 3 einsetzt kommt 9$ raus und das ergibt 9. 3 ist aber eine Primzahle.
MFG toddy
Bei Stichproben scheint es bei Zahlen >=5 zu klappen. Wie das funktioniert weiß ich jetzt auch net
-
Bocky< schrieb:
Eine andere Möglichkeit zu Berechnung von Primzahlen ist folgende:if( ( (primzahl*primzahl) %24 ) == 1 ) { return true; //Ist eine Primzahl } else{ return false;//Ist keine Primzahl }
Das scheint echt zu klappen!
Wie kann das sein?? Es muss Gegenbeispiele geben.
Wenn das so einfach wäre, könnte man sich das ganze Primzahl-Gesuche sparen.
-
erstes gegenbeispiel (für Zahlen größer 5): 25 nicht prim, aber 25*25 % 24 =1.
-
Gibt es auch ein Gegenbeispiel, wo eine Primzahl nicht erkannt wird?
Wenn nicht, könnte man diesen Test als Vor-Test benutzen.
-
asmodis schrieb:
erstes gegenbeispiel (für Zahlen größer 5): 25 nicht prim, aber 25*25 % 24 =1.
Und wenn man Quadrate von Primzahlen ausschließt? Denn dieses Problem tritt auch bei 49 (7*7) und denke auch bei 121 (11*11) auf.
Also würde der Test gehen:
- Bilde die Wurzel. Ist das möglich, return false;
- verfahre wie gewohnt.Gäbe es dann auch noch gegenbeispiele?
-
Ja:
(49 * 49 * 49) mod 24 = 1Also müsste man, wenn überhaupt, alle n-ten Potenzen von Primzahlen ausschließen.
In diesem Fall wäre es 7^6.
-
77 klappt auch nicht. Aber bis 1000 wird jede Primzahl erkannt.
-
Man kann zeigen, dass fuer jede Primzahl p>3 gilt: p² % 24 = 1 (man verwendet dabei, dass fuer p>3 prim gilt es ex. k mit p = 6k +/-1). Der Test liefert also eine notwendige Bedingung fuer primheit.
Dummerweise wird auch jede Zahl, deren Primfaktoren alle > 3 sind als ergbnis der modulo rechnung 1 haben.
-
Hallo,
ich hab das auch bis 1000 geprüft und es zeigt definitiv ALLE Primzahlen mit anderen Zahlen an. Gibt es wirklich keine Möglichkeit, diese nicht-Primzahlen auszuschließen? Und asmodis: Kannst du mir einen Beweis für das p = 6k /-1 geben? Denn das scheint zu stimmen, nur ich weiß nicht warum.
MFG Toddy
-
Toddy, 6k +/-1 liefert dir nicht zwingend ein Primzahlenpaar (k=4).
-
Toddy schrieb:
Kannst du mir einen Beweis für das p = 6k /-1 geben? Denn das scheint zu stimmen, nur ich weiß nicht warum.
Das ist nicht schwer.
Jede Zahl ist von einer der folgenden 6 Formen:
6k => geht nicht, ist durch 6 teilbar
6k+1 => möglich
6k+2 => geht nicht, ist durch 2 teilbar
6k+3 => geht nicht, ist durch 3 teilbar
6k+4 => geht nicht, ist durch 2 teilbar
6k+5 (=6(k+1)-1) => möglich
-
D-U-D-E schrieb:
Toddy, 6k +/-1 liefert dir nicht zwingend ein Primzahlenpaar (k=4).
Das nicht, aber jede Primzahl über 3 ist entweder als 6k-1 oder als 6k+1 darstellbar.