Grundlagen der Computational Number Theory

Robert Campbell

Einführung

Modular Arithmetic

Modulare Arithmetik Arithmetik ganzer Zahlen eine feste ganze Zahl N. Modulo So einige Beispiele für Operationen Modulo 12 sind:
  • 7 + 7 = 14 = 2 (mod 12)
  • 5 * 7 = 35 = 11 (mod 12)
Zu den grundlegenden Operationen haben wir den Divisionsoperator verpasst. Wenn wir in den ganzen Zahlen arbeiten würden wir fast nie in der Lage sein, um einen Quotienten zu bestimmen (es sei denn, die Antwort ist, selbst eine ganze Zahl). In den modularen ganzen Zahlen können wir oft, aber nicht immer, definiert einen Quotienten:
  • 11/5 = 7 (mod 12), wie 5 * 7 = 11 (mod 12)
  • 5 (-1) = 1/5 = 17 (mod 21) als 5 * 17 = 85 = 1 (mod 21)
  • 48/31 = 72 (mod 91), als 31 * 72 = 48 (mod 91)
  • 9/3 = 7 (mod 12), wie 3 * 7 = 21 = 9 (mod 12)

Als das letzte Beispiel weist darauf hin, ist modular Teilung nicht immer ein eindeutiges Ergebnis produzieren, für andere richtige Antworten sind 3 und 11 (als 3 · 3 = 9 (mod 12) und 3 * 11 = 33 = 9 (mod 12)). Insbesondere dann, wenn die Modul und die Divisor ein gemeinsamer Faktor (in diesem Fall 3 teilen beide 3 und 12), wird die Antwort nicht eindeutig sein, wenn es überhaupt existiert. Wir ziehen zwei Schlüsse daraus - die erste ist, dass wir eine solche gemeinsame Faktoren erkennen möchte in der Lage sein, und das zweite ist, dass wir solche Situationen vermeiden möchten. Normalerweise vermeiden wir die Situation immer unter Verwendung von nur erstklassige Module zeigt sich. die Situation Spek ist eines der Ergebnisse des nächsten Abschnitts.







GCD - Der euklidische Algorithmus

Die größte Zahl der beiden Zahlen n und m teilt der größte gemeinsame Teiler von n und m bezeichnet. und bezeichnet gcd (n. m).

Der Algorithmus finden gcd (n m.) Läuft in etwa so:
  1. Notieren Sie beide n und m
  2. Reduzieren Sie die größeren Modulo je kleiner
  3. Schritt 2 wiederholen, bis das Ergebnis Null ist
  4. Veröffentlichen des vorhergehenden Ergebnisses als gcd (n. M)

Ein Beispiel für diesen Algorithmus wird die folgende Berechnung von gcd (120.222):

Das folgende kurze Programm ermöglicht es Ihnen Beispiele für den euklidischen Algorithmus zur Berechnung:

Wenn Sie sorgfältig über den euklidischen Algorithmus denken Sie bei jedem Schritt sehen, dass beide Zahlen, indem Sie einige Vielfache der ursprünglichen Zahlen gebildet werden. So gibt es einige Zahlen, a und b. so dass gcd (n. m) a * + b * n = m. Der erweiterte euklidische Algorithmus erholen kann nicht nur gcd (n. M), aber auch diese Zahlen a und b.

Der erweiterte euklidische Algorithmus - Modular Inverses

Der erweiterten Euklidischen Algorithmus nicht nur berechnet gcd (n. M), sondern liefert auch die Zahlen a und b, so dass gcd (n m.) = A * n + b * m. Falls ggT (n. M) = 1 Dies löst das Problem des Berechnens modulare Inversen.

Nehmen wir an, wir n (-1) (mod m) und weiter an, dass ggT (n. M) = 1 berechnet werden soll. Führen des erweiterten Euklidischen Algorithmus A und B, so dass a * + b * n m = 1 zu erhalten. Umstellen dieses Ergebnis sehen wir, dass a * n = 1 b * m. oder a * n = 1 (mod m). Dies löst das Problem der modulare Inverse von n zu finden. da dies zeigt, dass n (-1) A (mod m) =.

Der erweiterte euklidische Algorithmus ist nichts anderes als der üblicher euklidische Algorithmus, mit Seiten Berechnungen sorgfältig zu verfolgen, welche Kombination der ursprünglichen Zahlen n und m bei jedem Schritt hinzugefügt. Der Algorithmus läuft in der Regel wie folgt aus:

  1. Schreiben Sie n nach unten. Meter und die zwei-Vektoren (1,0) und (0,1)
  2. Unterteilen die größere der beiden Zahlen, die durch den kleineren - nennen diesen Quotienten q
  3. Subtract q mal der kleinere von dem größeren (dh reduzieren die größer modulo der kleinere)
  4. Subtract q mal der Vektor auf den kleineren von dem Vektor entspricht, entsprechend dem größeren
  5. Wiederholen Schritte 2 bis 4, bis das Ergebnis Null ist,
  6. Veröffentlichen des vorhergehenden Ergebnisses als gcd (n. M)

Ein Beispiel für diesen Algorithmus wird die folgende Berechnung von 30 (-1) (mod 53):

Daraus sehen wir, dass ggT (30,53) = 1 und Neuanordnung Bedingungen sehen wir, dass 1 = -13 * 53 + 23 * 30. so schließen wir, dass 30 (-1) = 23 (mod 53). (Dies kann dadurch, dass 23 * 30 = 1 (mod 53), die Überprüfung bestätigt werden.)

Das folgende kurze Programm ermöglicht es Ihnen Beispiele für den erweiterten euklidischen Algorithmus zur Berechnung:

Potenzierung - Der russische Bauer Algorithm

Wenn eine Potenz einer Zahl mit einem endlichen Modul Berechnung gibt es effiziente Möglichkeiten, um es und ineffiziente Art und Weise zu tun, es zu tun. In diesem Abschnitt werden wir eine häufig verwendete effiziente Methode skizzieren, die den kuriosen Namen „der russische Bauer Algorithmus“ hat.

Der offensichtlichste Weg 12 10 (mod 23) zu berechnen ist 12 insgesamt neunmal zu multiplizieren, bei jedem Schritt das Ergebnis mod 23 reduziert wird. Eine effizientere Methode, die nur vier Multiplikationen erfolgt, indem zunächst darauf hingewiesen, dass erreicht:

12 2 = 6 (mod 23)
12 4 = 2 6 = 13 (mod 23)
12 8 2 = 13 = 8 (mod 23)

Wir haben durchgeführt jetzt drei squarings und mit der Feststellung, dass der Exponent bricht in Potenzen von 2 als 10 = 8 + 2 haben wir unsere Berechnung umschreiben kann:

12 10 = 12 (8 + 2)
= 12 * 8 12 2
= 8 * 6 = 2 (mod 23)

So ist unser Algorithmus besteht darin, die Exponenten als Zweierpotenzen zu schreiben. (Dies kann durch Schreiben sie als Zahlenbasis 2 und abliest aufeinanderfolgenden Ziffern durchgeführt werden - z. B. 1010 = 10102) Nun wir sukzessive Quadrate der Basiszahl für jede Stelle des Exponenten multiplizieren, die ein „1“ ist.

Das folgende kurze Programm ermöglicht es Ihnen Beispiele der russischen Bauer Methode zur Potenzierung zu berechnen:

Die (etwas kryptische) Ausgabe dieses Programms kann wie folgt gelesen werden:
  1. Die Basis zwei Ziffern des Exponenten
  2. Die aufeinanderfolgenden Quadrierungen der Basis (dh b 2 b b 4. 8.)
  3. Das Produkt aus den entsprechenden Plätzen

Primzahlen

Eine Primzahl ist eine Zahl, die keine Teiler außer 1 und die Zahl selbst ist.

Die Idee der Primzahlen wirft mehrere Fragen auf - wie findet man ein gutes und wie Sie eine Nummer in ein Produkt seiner Primfaktoren reduziere (dh wie Sie es Faktor)?

Das Sieb des Eratosthenes ist ein neues Verfahren (aus dem 3. Jahrhundert vor Christus). Die Idee ist, diese - notieren Sie alle Zahlen bis zu einem gewissen Punkt:
2 3 4 5 6 7 8 9 10 11 12 13 14 15.
Nun kreuzen Sie alle auch solche, die größer als 2:
2 3 4 5 6 7 8 9 10 11 12 13 14 15.
Nun streichen alle teilbar die von 3 (außer 3):
2 3 4 5 6 7 8910 11 12 13 1415.
Bei jedem Schritt finden wir die nächste Primzahl (Anzahl gestrichenen nicht) veröffentliche es als Haupt und ausstreichen alle seine Multiples. Also, in diesem Beispiel sehen wir, dass die Zahlen 2, 3, 5, 7, 11 und 13 prim sind.

Während das Sieb ist ein effizienter Weg, um eine große Anzahl von aufeinander folgenden Primzahlen zu finden, es nicht verwendet wird, kann eine beliebige Anzahl für primality zu testen. Dies kann mit einem pseudoprim Test durchgeführt werden.







Weitere Beispiele für diesen Test können unter Verwendung der zuvor erwähnten Verfahren der schnellen Potenzierung berechnet werden:

Element Bestellungen

Warum funktionierte der Primzahltest? Der Fermat pseudoprim Test, sowie eine Reihe anderer. hängt von einer einfachen Eigenschaft der Primzahlen im 17. Jahrhundert bemerkt von Pierre Fermat zuerst:

Satz: (Fermats kleiner Satz) Wenn p eine Primzahl ist und 0< b < p then b ( p -1) =1(mod p ) .

Um Primzahlen von Nicht-Primzahlen winnow wir die Tatsache zunutze machen, dass für eine Primzahl p dies für jede Basis b wahr ist. während für eine Nicht-Primzahl q und einer gewählten Basis B der Wert von b (q -1) (mod q) ist beliebig und nur selten gleich 1 ist.

Der kleinste von Null Exponenten e, so dass eine e = 1 (mod N) die Ordnung eines mod N. Dieser ist allgemein bezeichnet O (a) (mod N).

Eine Folge von Fermats kleinen Satz ist, dass für Primzahl p und 0< a < p. the order of a mod p divides ( p -1).

Die einfachste Möglichkeit, eine ganze Zahl Faktor ist zum Versuch teilen sie durch alle der Primzahlen kleiner als seine Quadratwurzel. Für eine große Zahl ist dies eine sehr ineffiziente Methode, though. Eine Reihe von besseren Methoden wurden während der Mitte und Ende des 20. Jahrhunderts, obwohl entwickelt. Wir werden Pollard p-1-Algorithmus beschreiben.

Diese Methode funktioniert in der Regel, wenn Sie bereit sind, genug, um groß genug, um Werte des Exponenten zu laufen. Manchmal hat man Glück hat, (p -1) nur kleine Faktoren, und Faktorisierung ist einfach. Manchmal sind Sie Pech, (p -1) hat einen großen Primfaktor und es braucht viel Arbeit N Faktor.

Die Struktur von Zp

Primitive Elemente - Zyklische Gruppen

Eine Zahl g ist primitiv mod p, wenn die Ordnung von g mod p (p-1).

Wenn p eine Primzahl ist, Fermats kleiner Satz, dass für jeden g nicht durch p teilbar. g (p-1) = 1 (mod p). Wenn r nicht prim ist, sagen r = pq. Dann gibt es keine primitiven Elemente mod r. Umgekehrt ist es (relativ) einfach zu beweisen, dass es primitive Elemente jede Primzahl p mod.

Wenn p prim ist, gibt es viele Elemente, die p primitive mod sind. aber es gibt keine Möglichkeit zu sagen, welche Elemente sind primitiv kurz ihre Reihenfolge zu finden. Somit 2 nicht primitiver mod 7 (2 1 = 2, 2 2 = 4 und 2 3 = 8 = 1 (mod 7), so dass die Größenordnung von 2 mod 7 3), aber 3 ist primitiv mod 7 (3 1 = 3, 3 = 9 2 = 2, 3 3 = 27 = 6, 3 4 = 81 = 4, 3 5 = 243 = 5, so dass die Größenordnung von 3 mod 7 ist 6).

(Streng genommen haben wir nicht die korrekte Verwendung von Primitivität gegeben. Eine korrekte Definition ist, dass g primitiv mod N ist, wenn die aufeinanderfolgenden Potenzen von g mod N produzieren alle ganzen Zahlen kleiner als N und coprime bis N. Diese schärfere Definition ermöglicht es uns, Zustand, dass es Grundelemente mod N, wenn und nur wenn N hat die Form p. p n. oder 2, p n. wobei p eine Primzahl ist.)

Jetzt über eine Reihe denken, die keine Primzahl ist, sagen N = pq. wo beide p und q Primzahlen sind. Betrachten wir ein einige, die coprime sowohl p und q (in anderen Worten: 0< a (mod p )< p. and similarly for q ). Thus from Fermat's Little Theorem we know that a ( p -1)( q -1) = ( a ( p -1) ) ( q -1) = 1 ( q -1) = 1 (mod p ) and similarly a ( p -1)( q -1) = 1 (mod q ). Thus a ( p -1)( q -1) = 1. The order of a mod pq must divide ( p -1)( q -1). In particular, as ( p -1)( q -1) < ( pq -1), we know that if N = pq is not prime, then no element has order N -1. We will use this to prove that a number is prime.

Unter anderem haben wir folgende gezeigt, die ein Unterfall dessen, was Eulers Theorem genannt wird. (Einer der vielen Sätze genannt „Eulers Theorem“.)

Theorem: Wenn N = pq. wo beide p und q Primzahlen sind, und wenn b ist, so dass gcd gewählt (b. N) = 1, dann b (p-1) (q -1) = 1 (mod N).

Miller-Rabin-Test

Proving Primality

Wenn wir also ein Element finden ein, so dass es um genau hat (N -1) mod N. dann haben wir bewiesen, dass N eine Primzahl ist. Unser Ansatz ist Brute-Force - wir versuchen, aufeinanderfolgende Werte von ein und sehen, ob jede primitiv ist. Die Arbeit ist nicht so schlimm, wie es klingt, wenn. Für jeden ein bestätigen wir zuerst, dass ein (N -1) = 1 (mod N). Jetzt wissen wir, dass die wahre Größenordnung von einem Teiler von N-1. a n für jeden Divisor n N Prüfen -1 ist nicht schlecht. Es gibt einen zweiten Trick, den wir allerdings anwenden können. Wenn die Reihenfolge der streng kleiner als N -1 ist, dann muss es eine Primfaktor p N -1, so dass ein (N-1) / p = 1 (mod N). So unser Algorithmus ist:
  1. Faktor (N -1) = p 1 e 1. p k e k. wo jedes p i prim
  2. Für einige Sequenz eines ‚s (a = 2,3,4,5. Ist wahrscheinlich gut genug)
    • Für jedes p i. wenn a (N-1) / p = 1 (mod N), abweisen
    Wenn ein (N-1) / p ≠ 1 (mod N) für alle p i. dann ist ein primitives und N ist eine Primzahl.

Manchmal leichter gesagt als getan, vor allem den Teil, wo Sie Faktor (N -1).

Andere Gruppen und Ringe

Zahlentheorie ist die Untersuchung von mehr als nur die ganzen Zahlen. Dies gilt sowohl, weil verschiedene andere algebraische Strukturen sind natürliche Verallgemeinerungen der ganzen Zahlen und auch, weil sie oft geben uns Informationen über die ganzen Zahlen.

Die erste Verallgemeinerung der ganzen Zahlen wir berühren ist die Gaußschen Zahlen, eine Verlängerung der ganzen Zahlen von i. die Quadratwurzel von minus eins.

Die Elemente der Gaussian Integers sind alle Zahlen der Form n + m i. wo beide n und m ganze Zahlen sind. Addition und Multiplikation in der üblichen Weise.

Galois Felder (auch als endliche Felder bezeichnet) sind Erweiterungen der ganzen Zahlen eine Primzahl p Modulo.

Wir beginnen mit den ganzen Zahlen p und einige Polynom modulo, die nicht gelöst werden kann (dh) betragen in diesem Bereich. Ermöglicht mit zwei konkreten Beispielen weiter:

Beispiel: GF (2 3) = Z2 [x] /< x 3 + x +1>

In unserem Beispiel wird mit den ganzen Zahlen modulo 2 (enthält nur die beiden Zahlen 0 und 1) beginnen. Im Einklang mit der üblichen Schreibweise werden wir diese F2 aufrufen. In dieses Feld gegeben aus unserem Hut wir nun das Polynom x 3 + x + 1 ziehen. Weder 0 noch 1 erfüllt diese Polynom mod 2. Nun behauptet, dass es eine Lösung ist, oder Wurzel des Polynoms, nennen Sie es ein und dieses Symbol zu unserem ursprünglichen Feld hinzufügen. Das, was wir jetzt haben, ist F2 [a] bezeichnet. Die Elemente dieser Sache haben die Form n + + m a einen 2. Hinweis k, dass es keine Elemente, die in einem kubischen sind als 3 kann ersetzt werden durch - ein -1 als vermutet wurde eine Wurzel des ursprünglichen Polynoms sein. In der Tat, wie wir Modulo arbeiten 2, so +1 und -1 sind gleich, wir 3 durch eine 1 ersetzen kann. Auflisten der 2 3 = 8 Elemente, die wir haben.

Beispiel: GF (5 4) = Z5 [x] /< x 4 +2 x 3 +3 x 2 + x +1>

Beginnend mit der Annahme, dass die naiven Definitionspolynom x 4 + 2 x 3 + 3 x 2 + x + 1 ist in der Tat nicht reduzierbarer mod 5 (und damit, dass dies ein finites Feld ist), haben wir in der Lage sind, diesen Bereich zu versuchen, in computing :

Ein wenig interessanter wird Rechenleistungen von Elementen. Genau wie im Fall des Rechnens mit den ganzen Zahlen, können wir effizient berechnen den russischen Bauern Algorithmus von quadriert und Multiplikation mit.

Ein Beispiel für diese effiziente Multiplikation Berechnung eines 26.
  • Wie in 26 = 16 + 8 + 2, können wir in der Basis 2 schreiben, 26 = 110102
  • So kann ein 26 = (a 16), (a 8) (a 2)
  • Computing:
    a 2. a 2 = a 2
    a 4. (a 2) 2 = 3 a 3 + 2 a 2 + a 4 + 4
    a 8. (a 4) 2 = (3 a 3 + 2 a 2 + a 4 + 4) 2 = 3 a 3 + 3
    a 16. (a 8) = 2 (3 a 3 + 3) 2 = 2 a 2 + a 4
  • So kann ein 26 = (a 16), (a 8) (a 2) = (2 a 2 + 4 a) (3 a 3 + 3), (a 2) = 3 a 3 + a 2 + 4
Es gibt eine Reihe von verschiedenen Möglichkeiten, in denen wir die grundlegenden russischen Bauern Algorithmus verwenden können. Der folgende etwas andere Ansatz ist ein wenig schwieriger zu verstehen, aber sauberer zu programmieren, da es nicht temporäre Variablen benötigt:
  • Wie 26 = 110102 26 können wir schreiben = 2 0 + (1 + 2 (0 + 2 (1 + 2 (1))))
  • und a 26 = a (0 + 2 (1 + 2 (0 + 2 (1 + 2 (1))))) = (a ((a (a) 2) 2) 2) 2
  • Computing:
    (A) 2 = a 2
    a (a) 2 = a 3 (die A 3 = a (a) 2)
    (A 3) 2 = 3 a 3 + 3 a 2 + a + 4 (die ein 6 = (a (a) 2) 2)
    (3 a 3 + 3 a 2 + a + 4) 2 = a 2 2 + 3 (die ein 12 = ((a (a) 2) 2) 2)
    a (2 a 2 + 3) = (2 a 3 + 3 a) (welches ein 13 = a ((a (a) 2) 2) 2)
    (2 a 3 + 3 a) 2 = 3 a 3 + a 2 + 4 (die ein 26 = (a ((a (a) 2) 2) 2) 2)
  • So kann ein 26 = 3 a 3 + a 2 + 4
Schließlich sind wir in der Lage zu sehen, ob unsere Polynom irreduzibel mod 5 (ohne es tatsächlich Factoring - ein Problem für einen anderen Tag). Die Struktur der endlichen Körper ist ähnlich die von Zp in einer Reihe von Möglichkeiten. Ein Analogon kleinen Satz von Fermat existiert, so dass für jedes Element b ∈GF (5 4), wir b (5 4 -1) = 1 haben müssen. Eine weitere Ähnlichkeit ist, dass jeder Galois-Feld-Grundelemente haben ist garantiert. In diesem Fall gibt es 5 4 = 625 Elemente, von denen eine (5 4 -1) = 624 nicht Null sind. Somit wird ein Grundelement, um genau 624. Wie in dem ganzzahligen Fall hat, überprüfen wir dies mit der Feststellung, dass 624 Primfaktorenzerlegung 624 = (2 4) (3) (13).
  • Versuchen, eine ∈GF (5 4)
    • a (5 4 -1) = 1
    • a (5 4 -1) / 2 = 1 (so ist ein nicht primitives - in der Tat eine Ordnung hat 39)
  • Versuchen (ein +1) ∈GF (5 4)
    • (A + 1) (5 4 -1) = 1
    • (A + 1) (5 4 -1) / 2 = 4 ≠ 1
    • (A + 1) (5 4 -1) / 3 = 3 a 2 a 3 ≠ 1
    • (A + 1) (5 4 -1) / 13 = a + a 2 + a 3 ≠ 1

So (a + 1) hat, um genau 624 und ist primitiv. So haben wir, dass das Polynom x 4 + 2 x 3 + 3 gezeigt x 2 + x + 1 nicht reduzierbar ist.

Anhänge

A. Grundprogrammierhinweise

Größe - Multiple Precision

Einige der interessantesten Fragen in der algorithmischen Zahlentheorie beinhalten eine große Zahl. Dies kann ein Problem sein, da die meisten Sprachen und Maschinen nur ganze Zahlen unterstützen bis zu einer bestimmten festen Größe auf, die üblicherweise 2 64 Bits (etwa 1,6 × 10 19) bzw. 2 32 Bit (ungefähr 4 × 10 9).

Programmiersprachen

Im Folgenden sind einfache, interpretierte Sprachen, in denen ich grundlegende Zahlentheorie Programme geschrieben habe, geeignet für den Einsatz im Unterricht und Modifikation.

Weitere Details über die Programmierung für die Zahlentheorie können hier in einem verwandten Dokument.

Bezugnahmen







In Verbindung stehende Artikel