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