Primzahltest-Algorithmen
Überblick über Primzahltests
Primzahltests beinhalten die Bestimmung, ob eine gegebene Zahl prim ist. Es existieren mehrere Algorithmen, jeder mit unterschiedlicher Effizienz und Komplexitätsstufe.
Allgemeine Primzahltest-Algorithmen
Algorithmus |
Zeitkomplexität |
Genauigkeit |
Komplexität |
Divisionsprüfung |
O(√n) |
100% |
Niedrig |
Fermat-Primzahltest |
O(k log n) |
Wahrscheinlich |
Mittel |
Miller-Rabin-Test |
O(k log³n) |
Wahrscheinlich |
Hoch |
Divisionsprüfungsverfahren
def trial_division(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
Fermat-Primzahltest
import random
def fermat_test(n, k=5):
if n <= 1 or n == 4:
return False
if n <= 3:
return True
for _ in range(k):
a = random.randint(2, n - 2)
if pow(a, n - 1, n)!= 1:
return False
return True
Miller-Rabin-Primzahltest
def miller_rabin(n, k=5):
if n <= 1 or n == 4:
return False
if n <= 3:
return True
def check(a, d, n, s):
x = pow(a, d, n)
if x == 1 or x == n - 1:
return True
for _ in range(s - 1):
x = pow(x, 2, n)
if x == n - 1:
return True
return False
s = 0
d = n - 1
while d % 2 == 0:
d //= 2
s += 1
for _ in range(k):
a = random.randint(2, n - 2)
if not check(a, d, n, s):
return False
return True
Flussdiagramm zum Vergleich der Algorithmen
graph TD
A[Start Primzahltest] --> B{Wähle Algorithmus}
B --> |Einfache Fälle| C[Divisionsprüfung]
B --> |Wahrscheinlich| D[Fermat-Test]
B --> |Fortgeschritten| E[Miller-Rabin-Test]
C --> F{Ist Prim?}
D --> G{Wahrscheinlichkeit der Primzahligkeit}
E --> H{Hoch genaue}
Praktische Überlegungen
Bei LabEx empfehlen wir, den geeigneten Algorithmus auszuwählen, basierend auf:
- Größen der Zahl
- erforderlicher Genauigkeit
- Rechenressourcen
- spezifischem Anwendungsfall