Da hier viel Text und viele Vermutungen einfach "hingeschmissen" wurden, versuche ich etwas wissenschaftliche Mathematik (Ordnung) hineinzubringen.
Es geht hier um die Güte oder besser Fehlerquote von Pseudoprimzahl-Algorithmen.
Beispiele von Fehlern wurden bereits genannt: 49
selbst das Vorgerechnete Beispiel 9977 ist falsch:
360 : 9977 = 0,036082991.. , * (9977 : 6 * 5 = 8314,16666.. - abgerundet auf 8314 ) = 30 (ganzzahlig) > 9977 ist k e i n e Primzahl (11 * 907).
nicht 30 sondern 299.993986...
Hier der geomane Pseudoprimzahl-Algorithmus, so wie ich ihn verstanden habe:
Rund[n_] := Module[{r = n*50/6}, If[Mod[r, 10] == 5, r/10, Round[r/10]]];
geomane[n_] := ! IntegerQ[360*Rund[n]/n];
Im Bereich von 23...99 hat er eine Fehlerquote von
Total[Table[ If[geomane[k] == PrimeQ[k], 0, 1], {k, von = 23, bis = 99, 2}]]
Print[N[%*100/Quotient[bis - von, 2]], " %"]
9, also unter den ungeraden Zahlen 23.68421 %
Im Bereich von 3474749660393 bis 3474749660393 + 2*10^3
Total[Table[ If[geomane[k] == PrimeQ[k], 0, 1], {k, von = 3474749660393, bis = 3474749660393 + 2*10^3, 2}]]
Print[N[%*100/Quotient[bis - von, 2]], " %"]
600 Fehler -> also unter den ungeraden Zahlen 60% falsch!
(ein guter Zufallsgenerator hätte nur 50% falsch "geraten")
Hier ein bekannter vereinfachter Miller-Rabin-Test (ggT(x,102481630431415235)<2)&&(PowMod(2,x-1,x)==1) zum Vergleich, der nicht nur x mal schneller, sondern auch zig mal genauer ist:
siehe http://www.pi-e.de/Miller-Rabin-Pseudoprimzahlen.htm
Miller[x_] := (GCD[x, 102481630431415235] < 2) && (PowerMod[2, x - 1, x] == 1);
Total[Table[ If[Miller[k] == PrimeQ[k], 0, 1], {k, von = 3474749660393, bis = 3474749660393 + 2*10^3, 2}]]
Print[N[%*100/Quotient[bis - von, 2]], " %"]
0 Fehler!
Auf der verlinkten Seite geht es am Ende zu einem Benchmark, wo
10 Mio. 26stellige Primzahlen fehlerfrei in 12 s gefunden werden können.
Oder 10 Mio. 20stellige Primzahlen fehlerfrei in 7 s.
Das zur Bemerkung:
WIKIPEDIA beschreibt diverse „Primzahlentests“, die nach zu Ende Lesen allesamt nicht definitiv tauglich sind
Grüße
Hinweise:
PrimeQ wird oft auch als IsPrime Funktion bezeichnet.
IntegerQ ermittelt, ob Ganzzahl -> also ermittelt
!IntegerQ[n]
ob n eine NICHT-Ganzzahl ist.
"Komma fünf glatt" ermittelt man mit mit dem 10fachen Wert -> dann mit Modulo 10 "die letzte Ziffer".