Zahlentheorie in Mathematica

Werbung
Zahlentheorie in Mathematica
Literatur
Empfehlung:
Mathematica in Action von Stan Wagon
1
Einige Grundfunktionen
Prime[x] gibt die x-te Primzahl an
NextPrime[x] gibt die nächste Primzahl nach x
NextPrime[x,k] gibt die k-te Primzahl nach x an
PrimePi[x] gibt π(x) an
EulerPhi[x] gibt ϕ(x) an
Bemerkung:
Das größtmögliche Argument für PrimePi ist 1020 (mehrere Stunden Rechenzeit und
spezielle Algorithmen). Die oben genannten Funktionen Prime und PrimePi sollten
nicht für Werte über einer Billion verwendet werden.
FactorInteger[x] gibt die Primfaktorzerlegung einer Zahl x an
Divisors[x] gibt alle Teiler von x an
GCD[x,y] gibt den größten gemeinsamen Teiler von x und y an
LCM[x,y] gibt das kleinste gemeinsame Vielfache von x und y an
Bemerkung:
GCD und LCM basieren auf dem euklidischen Algorithmus und sind deshalb auch
für Zahlen mit bis zu 100 Stellen geeignet.
Mod[x,y] reduziert x modulo y
PowerMod[x,y,z] reduziert xy modulo z mit Hilfe des Algorithmus ”Quadrieren und
Multiplizieren”.
1
2
Die Primzahlfunktion
Es gab in der Historie viele Versuche, die Primzahlfunktion
π(x) = |{p|p prim und p ≤ x}| zu approximieren:
• Primzahlsatz
lim
π(x)
x→∞
x
ln x
• besser:
Z
Li(x) =
2
=1
x
dt
ln t
π(x) = Li(x) + O(xe−C
• Legendre: π(x) ≈
√
ln x
), C ≥ 0
x
ln x−1,08366
Aufgabe 1
Zeichne die Funktion π(x). Vergleiche sie mit den Approximationen von oben.
3
Primzahltests
PrimeQ[x]: testet x auf Primalität
• benutzt Tests, die zuverlässig sind für x ≤ 1016
•
1. sucht kleine Teiler → false
2. strenger Pseudoprimzahltest zur Basis 2 → false
3. strenger Pseudoprimzahltest zur Basis 3 → false
4. Lucas Lehmer Test → false
5. sonst → true
• wenn false, dann false, aber bei true?
• auch für größere x ist kein Gegenbeispiel bekannt
besser:
ProvablePrimeQ[x]: testet x auf Primalität und erstellt ein Zertifikat, mit dem die
Primalität überprüft bzw. widerlegt werden kann.
Falls die Zahl prim ist, wird ein Zertifikat auf Basis des Pratt Tests erstellt, dieser
basiert auf folgender Aussage von Lehmer.
2
Satz 3.1. Sei n eine positive Zahl und {pi } die Menge der Primfaktoren von n−1, sei
w eine positive Zahl, witness, mit wn−1 ≡ 1(mod n) und we 6= 1(mod n) ∀e = n−1
.
pi
Dann ist n eine Primzahl.
ohne Beweis
Das Zertifikat besteht dann aus den Primfaktoren pi von n − 1 und dem ”Zeugen”
w.
Polynomiell und damit ein zulässiges Zertifikat wird das Verfahren, indem es rekursiv auf die mutmaßlichen Primfaktoren von n − 1 angewandt wird.
Falls n größer als eine gewisse Grenze ist (in Mathematica 7 standardmässig 1050 )
wird ein Zertifikat mit Hilfe des Atkin-Morain Tests erstellt.
Wird eine zusammengesetzte Zahl an ProvablePrimeQ übergeben, erhält man entweder ein Tripel (a, n − 1, n) oder ein Tripel (a, 2, n), wobei ersteres darauf deutet,
dass an−1 6≡ 1 mod n im Widerspruch zum kleinen Fermatschen Satz und zweiteres
darauf, dass a2 = 1 mod n obwohl a 6≡ ±1 mod n. Auch dies kann für prime n nicht
auftreten.
3
Herunterladen