„Solovay-Strassen-Test“ – Versionsunterschied
[ungesichtete Version] | [gesichtete Version] |
→Was steckt hinter dem Solovay-Strassen-Test?: Euler-Jacobi-Pseudoprimzahlen bestehen den Test (Korr. Fehler v. 2010) |
|||
(68 dazwischenliegende Versionen von 47 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Der '''Solovay-Strassen-Test''' (nach [[Robert Solovay]] und [[Volker Strassen]]) ist ein [[ |
Der '''Solovay-Strassen-Test''' (nach [[Robert M. Solovay]] und [[Volker Strassen]]) ist ein [[Probabilistischer Algorithmus|probabilistischer]] [[Primzahltest]]. Der Test prüft für eine ungerade Zahl ''n'', ob sie [[Primzahl|prim]] oder [[Zusammengesetzte Zahl|zusammengesetzt]] ist. Im letzteren Fall liefert der Test jedoch im Allgemeinen keinen Faktor der Zahl ''n''. |
||
Der Test ist |
Der Solovay-Strassen-Test ist, wie der [[Miller-Rabin-Test]], ein [[Monte-Carlo-Algorithmus]]. Das heißt, er liefert nur mit einer gewissen Wahrscheinlichkeit (50 %) eine Aussage. Durch Wiederholung kann diese Wahrscheinlichkeit aber beliebig vergrößert werden. Ergibt der Test (wiederholt) keine Aussage, so lässt sich dies als ''„n ist wahrscheinlich eine Primzahl“'' interpretieren. |
||
== Vorgehensweise == |
|||
Der Test fällt in die Klasse der [[Monte-Carlo-Algorithmus|Monte-Carlo-Algorithmen]] d. h. für den Test wird ein Zufallsexperiment benötigt. |
|||
Zu einer ungeraden Zahl <math>n</math>, welche auf Primzahleigenschaft zu testen ist, wird zufällig eine natürliche Zahl <math>a</math> mit <math>1<a<n</math> gewählt. Bei mehrfacher Durchführung des Tests sind für <math>a</math> jeweils neue Werte zu wählen. |
|||
* Es wird der [[ggT|größte gemeinsame Teiler]] <math>g := \operatorname{ggT}(a,n)</math> berechnet. Falls <math>g > 1</math> gilt, so ist <math>g</math> ein echter Teiler von <math>n</math>. Damit ist <math>n</math> keine Primzahl und der Test wird beendet. |
|||
* Berechne |
|||
:: <math>b := a^{\frac{n-1}{2}} \mod n</math> |
|||
: Gilt <math>1 < b < n-1</math>, so kann <math>n</math> nach dem [[Kleiner Fermatscher Satz#Folgerung durch Euler|Satz von Euler]] keine Primzahl sein und der Test wird beendet. Ist aber <math>b=1</math> oder <math>b=n-1</math>, kann es sich bei <math>n</math> um eine [[Eulersche Pseudoprimzahl]] handeln und der folgende Schritt muss noch ausgeführt werden. |
|||
* Berechne das [[Jacobi-Symbol]] <math>J(a,n)</math>. Falls <math>n</math> eine Primzahl ist, so muss <math>J(a,n)\equiv b\ mod\ n</math> gelten. Gilt dies nicht, kann <math>n</math> keine Primzahl sein und der Test ist beendet. |
|||
* Falls die Berechnungen nacheinander <math>g = 1, b = 1</math> oder <math>b = n-1, J(a,n)\equiv b\ mod\ n</math> ergeben, liefert der Solovay-Strassen-Test keine Aussage, <math>n</math> ist also eventuell eine Primzahl. |
|||
== Bewertung == |
|||
Er basiert ähnlich wie der [[Miller-Rabin-Test]] auf einem Satz, mit dem festgestellt werden kann, ob eine Zahl eine [[Primzahl]] ist, oder nicht. |
|||
Um die Güte des Solovay-Strassen-Tests zu bewerten, muss unterschieden werden, ob <math>n</math> eine Primzahl ist oder nicht. |
|||
* Falls <math>n</math> eine Primzahl ist, liefert der Test ''immer'' das korrekte Ergebnis (nämlich „keine Aussage“). |
|||
* Falls <math>n</math> keine Primzahl ist, ist die Wahrscheinlichkeit, im ersten Schritt des Tests ein <math>a</math> zu wählen, so dass der Test ein falsches Ergebnis liefert, kleiner als 1/2 (siehe unten: ''Falsche Zeugen''). |
|||
Um die Güte des Tests für Nichtprimzahlen zu erhöhen, wird der Test mit unabhängig gewählten zufälligen Basen <math>a</math> hinreichend oft wiederholt. Wenn der Test <math>k</math>-mal wiederholt wird, dann ist die Wahrscheinlichkeit, dass in allen <math>k</math> Wiederholungen das Ergebnis „keine Aussage“ lautet (obwohl <math>n</math> keine Primzahl ist), kleiner als <math>1/2^k</math>. Dies ist eine pessimistische Schätzung – in den meisten Fällen wird die Güte wesentlich besser sein. |
|||
<!-- |
|||
=== Vorbemerkung zum Satz von Euler und zu Jacobi-Symbol === |
|||
:<math>2^{\frac{n-1}{2}} \equiv -1 \mod n</math> bedeutet praktisch <math>(2^{\frac{n-1}{2}}\bmod n)=n-1</math> |
|||
:J(a,n) = -1 bedeutet praktisch J(a,n) = n-1 --> |
|||
== |
== Effizienz == |
||
Der Solovay-Strassen-Test ist effizient, da der ggT, die Potenzen und das Jacobi-Symbol effizient berechnet werden können. |
|||
* Zu einer ungeraden Zahl ''n'', von der wir feststellen wollen, ob sie eine Primzahl ist, wird zufällig eine natürliche Zahl ''a'' mit ''1 < a < n'' gewählt. |
|||
* Es wird |
|||
:''g := [[ggT]](a,n)'' |
|||
:berechnet. Falls ''g > 1'' ist, so ist ''g'' ein echter Teiler von ''n'', und somit ist ''n'' keine Primzahl (und der Test ist dann hier beendet). |
|||
* Wenn diese Hürde überwunden ist, wird |
|||
:<math>b := a^{\frac{n-1}{2}} \mod n</math> |
|||
:berechnet. Falls ''1 < b < n-1'', kann ''n'' nach einem Satz von [[Euler]] (eine etwas strengere Variante des [[Kleiner Fermatscher Satz|kleinen Fermatschen Satzes]]) keine Primzahl sein (und der Test ist dann hier beendet). Ist andererseits ''b = 1'' oder ''b = n-1'', kann es sich bei ''n'' um eine [[Eulersche Pseudoprimzahl]] handeln, und der folgende Schrit muss noch ausgeführt werden. |
|||
* Es wird das [[Jacobi-Symbol]] |
|||
:''j := J(a,n)'' |
|||
:berechnet. Falls ''n'' eine Primzahl ist, so muss hier <math>j\equiv b\pmod n</math> gelten. Gilt dies nicht, kann also ''n'' keine Primzahl sein (und der Test ist dann hier beendet). |
|||
* Nur für den Fall, dass die Berechnungen nacheinander |
|||
:''g = 1'' |
|||
:''b = 1'' oder ''b = -1'' |
|||
:<math>j\equiv b\pmod n</math> |
|||
:ergeben, liefert der Test, dass ''n'' eine Primzahl ist. |
|||
== |
== Beispiel == |
||
Am Beispiel der zusammengesetzten Zahl <math>n = 91</math> (einer [[Fermatsche Pseudoprimzahl|Fermatschen Pseudoprimzahl]] zu – beispielsweise – den Basen 17, 29) wird ein möglicher Ablauf des Tests gezeigt: |
|||
* Liefert der ''Solovay-Strassen-Test'', dass ''n'' '''keine Primzahl''' ist, so ist diese Aussage korrekt. |
|||
* Liefert der Test als Antwort, dass ''n'' eine '''Primzahl''' ist, so ist dies jedoch keine Garantie dafür. |
|||
Um die Güte des ''Solovay-Strassen-Tests'' zu bewerten, muss unterschieden werden, ob ''n'' eine Primzahl ist oder nicht. |
|||
* Wenn ''n'' eine Primzahl ist, liefert der Test ''immer'' das korrekte Ergebnis. |
|||
* Wenn ''n'' keine Primzahl ist, ist die Wahrscheinlichket, im ersten Schritt des Tests ein ''a'' zu wählen, sodass der Test ein falsches Ergebnis liefert, kleiner als 1/2 (siehe unten: ''Falsche Zeugen''). |
|||
Ist 91 eine Primzahl? |
|||
Um die Güte des Tests für Nichtprimzahlen zu erhöhen, wird der Test mit unabhängig gewählten zufälligen ''a''-Werten hinreichend oft wiederholt. Wenn der Test ''k'' mal wiederholt wird, dann ist die Wahrscheinlichkeit dass in allen ''k'' Wiederholungen das Ergebnis ''Primzahl'' lautet (obwohl ''n'' keine Primzahl ist), kleiner als <math>1/2^k</math>. Dies ist eine pessimistische Schätzung - in den meisten Fällen wird die Güte wesentlich besser sein. |
|||
Test 1:<math>a = 29</math> |
|||
==Effizienz== |
|||
:<math>g = \operatorname{ggT}(29,91) = 1,\,\, b = 29^{45} \equiv 1 (\text{mod }\, 91),\,\, J(29,91) = 1 \equiv b \text{ mod } 91 \implies \text{ Primzahl nicht ausgeschlossen }</math> |
|||
Der ''Solovay-Strassen-Test'' ist effizient, da der ggT, die Potenzen und das Jacobi-Symbol effizient berechnet werden können. |
|||
Test 2: <math>a = 17</math> |
|||
==Beispiel== |
|||
:<math>g = \operatorname{ggT}(17,91) = 1,\,\, b = 17^{45} \equiv -1 (\text{mod }\, 91),\,\, J(17,91) = -1 \equiv b \text{ mod } 91 \implies \text{Primzahl nicht ausgeschlossen}</math> |
|||
Am Beispiel der zusammengesetzten Zahl ''n = 91'' (einer [[Pseudoprimzahl]]) werden die möglichen Abläufe des Tests gezeigt: |
|||
<!-- Rechnung für Jacobi-Symbol: J(17,91) = J(17,7) * J(17,13) = J(3,7) * J(4,13) = (-1) * 1 = -1 --> |
|||
{| border=1 |
|||
| colspan=4 |Ist 91 eine Primzahl? |
|||
|- |
|||
|Fall 1: a = 7 ||Fall 2: a=23|| Fall 3: a= 17|| Fall 4: a=29 |
|||
|- |
|||
| |
|||
g = ggT(7,91) = 7 |
|||
=> |
|||
keine Primzahl |
|||
| |
|||
g = ggT(23,91) = 1 |
|||
b = <math>23^{(91-1)/2}</math> mod 91 = 64 |
|||
=> |
|||
keine Primzahl |
|||
| |
|||
g = ggT(17,91) = 1 |
|||
b = <math>17^{(91-1)/2}</math> mod 91 = -1 |
|||
j = J(17,91) = 1 |
|||
j = b |
|||
=> |
|||
keine Primzahl |
|||
| |
|||
g = ggT(29,91) = 1 |
|||
b = <math>29^{(91-1)/2}</math> mod 91 = 1 |
|||
j = J(29,91) = 1 |
|||
j = b |
|||
=> |
|||
91 ist eine Primzahl |
|||
|} |
|||
Test 3: <math>a = 23</math> |
|||
Die Wahrscheinlichkeit an: |
|||
:<math>g = \operatorname{ggT}(23,91) = 1,\,\, b = 23^{45} \equiv 64 (\text{mod }\, 91) \implies \text{keine Primzahl}</math> |
|||
*Fall 1 zu scheitern beträgt bei 91 ca. 20% |
|||
*Fall 2 zu scheitern beträgt bei 91 ca. 61% |
|||
*Fall 3 zu scheitern beträgt bei 91 ca. 9% (geschätzt) |
|||
== Falsche Zeugen == |
== Falsche Zeugen == |
||
Sei n > 2 eine ungerade, zusammengesetzte Zahl.<br> |
|||
Eine zu <math>n</math> teilerfremde Zahl <math>a</math> heißt ''falscher Zeuge'' für die Primalität von <math>n</math> bezüglich des Solovay-Strassen-Tests, falls |
|||
:<math>a^{\frac{n-1}{2}} \equiv J(a,n) \mod n</math>. |
|||
Für <math>n = 91</math> sind also die Basen <math>a = 17, 29</math> falsche Zeugen. Da die Menge der falschen Zeugen eine Untergruppe der [[Multiplikative Gruppe|multiplikativen Gruppe]] <math>(\mathbb{Z}/n)^*</math> mit [[Gruppenordnung|Ordnung]] kleiner oder gleich <math>\frac{\varphi(n)}{2}</math> bildet (dabei bezeichnet <math>\varphi</math> die [[Eulersche φ-Funktion]], die die Anzahl der teilerfremden Zahlen kleiner als <math>n</math> angibt) und <math>\varphi(n) < n</math> gilt, sind höchstens die Hälfte aller zur Auswahl stehenden Basen <math>a</math> falsche Zeugen. Daher erreicht man bei <math>k</math> Durchläufen eine Wahrscheinlichkeit für einen Fehler (d. h., eine zusammengesetzte Zahl wird nicht als solche erkannt), die kleiner als <math>1/2^k</math> ist. |
|||
== Was steckt hinter dem Solovay-Strassen-Test? == |
|||
Sei ''n > 2'' eine ungerade Nichtprimzahl. Eine Zahl ''a'' mit ggT(''a'',''n'') = 1 heißt [[falscher Zeuge]] für die Primalität von <math>n</math> bezüglich des ''Solovay-Strassen-Tests'', falls |
|||
Der Solovay-Strassen-Test beruht auf zwei Primzahl-Eigenschaften: |
|||
<center> |
|||
<math>a^{\frac{n-1}{2}} \equiv J(a,n) \pmod{n}</math> |
|||
</center> |
|||
Die eine ist der [[Kleiner fermatscher Satz#Folgerung durch Euler|Eulersche Satz]]: Für jede Primzahl ''p'' > 2 gilt |
|||
Die Menge der falschen Zeugen bildet eine Untergruppe zur [[multiplikative Gruppe|multiplikativen Gruppe]] <math>(\mathbb{Z}/n)^*</math> mit [[Gruppentheorie|Ordnung]] <math>\leq \frac{1}{2}\phi(n)</math> (<math>\phi</math> bezeichnet die [[Eulersche φ-Funktion]]). |
|||
: <math>a^{\frac{p-1}{2}} \equiv \pm 1 \pmod p</math> . |
|||
Mit diesem Kriterium werden alle Zahlen herausgesiebt, die weder [[Primzahl]]en noch [[Eulersche Pseudoprimzahl]]en zur Basis ''a'' sind. |
|||
Die andere Eigenschaft verbindet dies mit dem [[Legendre-Symbol]]: Für jede Primzahl ''p'' > 2 gilt |
|||
Da <math>\phi(n) < n</math> gilt, sind höchstens die Hälfte aller zur Auswahl stehenden Zahlen ''a'' falsche Zeugen. |
|||
: <math>a^{\frac{p-1}{2}} \equiv \Big(\frac{a}{p}\Big)\pmod p</math> . |
|||
[[Kategorie:Algorithmus]] |
|||
Da man bei den zu testenden Zahlen nicht davon ausgehen darf, dass es sich um Primzahlen handelt, benutzt man das [[Jacobi-Symbol]].<br> |
|||
Damit fallen auch jene eulerschen Pseudoprimzahlen raus, für die <math>a^{\frac{n-1}{2}} \equiv \left(\frac{a}{n}\right) \pmod n</math> nicht gilt; es bleiben nur noch Primzahlen und [[Eulersche Pseudoprimzahl#Definition|Euler-Jacobi-Pseudoprimzahlen]] übrig. |
|||
== Literatur == |
|||
* [[Paulo Ribenboim]]: ''Die Welt der Primzahlen'', Springer Verlag, 1996, S. 97 |
|||
[[Kategorie:Zahlentheoretischer Algorithmus]] |
Aktuelle Version vom 15. Juli 2023, 16:43 Uhr
Der Solovay-Strassen-Test (nach Robert M. Solovay und Volker Strassen) ist ein probabilistischer Primzahltest. Der Test prüft für eine ungerade Zahl n, ob sie prim oder zusammengesetzt ist. Im letzteren Fall liefert der Test jedoch im Allgemeinen keinen Faktor der Zahl n.
Der Solovay-Strassen-Test ist, wie der Miller-Rabin-Test, ein Monte-Carlo-Algorithmus. Das heißt, er liefert nur mit einer gewissen Wahrscheinlichkeit (50 %) eine Aussage. Durch Wiederholung kann diese Wahrscheinlichkeit aber beliebig vergrößert werden. Ergibt der Test (wiederholt) keine Aussage, so lässt sich dies als „n ist wahrscheinlich eine Primzahl“ interpretieren.
Vorgehensweise
[Bearbeiten | Quelltext bearbeiten]Zu einer ungeraden Zahl , welche auf Primzahleigenschaft zu testen ist, wird zufällig eine natürliche Zahl mit gewählt. Bei mehrfacher Durchführung des Tests sind für jeweils neue Werte zu wählen.
- Es wird der größte gemeinsame Teiler berechnet. Falls gilt, so ist ein echter Teiler von . Damit ist keine Primzahl und der Test wird beendet.
- Berechne
- Gilt , so kann nach dem Satz von Euler keine Primzahl sein und der Test wird beendet. Ist aber oder , kann es sich bei um eine Eulersche Pseudoprimzahl handeln und der folgende Schritt muss noch ausgeführt werden.
- Berechne das Jacobi-Symbol . Falls eine Primzahl ist, so muss gelten. Gilt dies nicht, kann keine Primzahl sein und der Test ist beendet.
- Falls die Berechnungen nacheinander oder ergeben, liefert der Solovay-Strassen-Test keine Aussage, ist also eventuell eine Primzahl.
Bewertung
[Bearbeiten | Quelltext bearbeiten]Um die Güte des Solovay-Strassen-Tests zu bewerten, muss unterschieden werden, ob eine Primzahl ist oder nicht.
- Falls eine Primzahl ist, liefert der Test immer das korrekte Ergebnis (nämlich „keine Aussage“).
- Falls keine Primzahl ist, ist die Wahrscheinlichkeit, im ersten Schritt des Tests ein zu wählen, so dass der Test ein falsches Ergebnis liefert, kleiner als 1/2 (siehe unten: Falsche Zeugen).
Um die Güte des Tests für Nichtprimzahlen zu erhöhen, wird der Test mit unabhängig gewählten zufälligen Basen hinreichend oft wiederholt. Wenn der Test -mal wiederholt wird, dann ist die Wahrscheinlichkeit, dass in allen Wiederholungen das Ergebnis „keine Aussage“ lautet (obwohl keine Primzahl ist), kleiner als . Dies ist eine pessimistische Schätzung – in den meisten Fällen wird die Güte wesentlich besser sein.
Effizienz
[Bearbeiten | Quelltext bearbeiten]Der Solovay-Strassen-Test ist effizient, da der ggT, die Potenzen und das Jacobi-Symbol effizient berechnet werden können.
Beispiel
[Bearbeiten | Quelltext bearbeiten]Am Beispiel der zusammengesetzten Zahl (einer Fermatschen Pseudoprimzahl zu – beispielsweise – den Basen 17, 29) wird ein möglicher Ablauf des Tests gezeigt:
Ist 91 eine Primzahl?
Test 1:
Test 2:
Test 3:
Falsche Zeugen
[Bearbeiten | Quelltext bearbeiten]Sei n > 2 eine ungerade, zusammengesetzte Zahl.
Eine zu teilerfremde Zahl heißt falscher Zeuge für die Primalität von bezüglich des Solovay-Strassen-Tests, falls
- .
Für sind also die Basen falsche Zeugen. Da die Menge der falschen Zeugen eine Untergruppe der multiplikativen Gruppe mit Ordnung kleiner oder gleich bildet (dabei bezeichnet die Eulersche φ-Funktion, die die Anzahl der teilerfremden Zahlen kleiner als angibt) und gilt, sind höchstens die Hälfte aller zur Auswahl stehenden Basen falsche Zeugen. Daher erreicht man bei Durchläufen eine Wahrscheinlichkeit für einen Fehler (d. h., eine zusammengesetzte Zahl wird nicht als solche erkannt), die kleiner als ist.
Was steckt hinter dem Solovay-Strassen-Test?
[Bearbeiten | Quelltext bearbeiten]Der Solovay-Strassen-Test beruht auf zwei Primzahl-Eigenschaften:
Die eine ist der Eulersche Satz: Für jede Primzahl p > 2 gilt
- .
Mit diesem Kriterium werden alle Zahlen herausgesiebt, die weder Primzahlen noch Eulersche Pseudoprimzahlen zur Basis a sind.
Die andere Eigenschaft verbindet dies mit dem Legendre-Symbol: Für jede Primzahl p > 2 gilt
- .
Da man bei den zu testenden Zahlen nicht davon ausgehen darf, dass es sich um Primzahlen handelt, benutzt man das Jacobi-Symbol.
Damit fallen auch jene eulerschen Pseudoprimzahlen raus, für die nicht gilt; es bleiben nur noch Primzahlen und Euler-Jacobi-Pseudoprimzahlen übrig.
Literatur
[Bearbeiten | Quelltext bearbeiten]- Paulo Ribenboim: Die Welt der Primzahlen, Springer Verlag, 1996, S. 97