# Primzahlgenerator

Als Primzahlgenerator bezeichnet man in der Informatik einen Algorithmus $f(n)$, so dass für natürliche Zahlen $n$ der Wert $f(n)$ die $n$-te Primzahl ist. In der Mathematik und speziell der Zahlentheorie entspricht das Formeln, die besonders viele Primzahlen liefern (Formeln für Primzahlen). Bisher wurde noch kein effizienter Primzahlgenerator gefunden, insbesondere existiert keine praktikable geschlossene Formel zur Generierung von Primzahlen.
Es gibt allerdings Formeln, bei denen eine gewisse Wahrscheinlichkeit besteht, dass eine erzeugte Zahl eine Primzahl ist, so dass die erzeugten Zahlen noch darauf getestet werden müssen, ob sie prim sind. Im Artikel werden auch andere Formeln behandelt, die nicht praxistauglich sind, die aber in der mathematischen Literatur bezüglich der Frage diskutiert wurden, ob sie viele Primzahlen liefern.

## Geschichte

Einer der ältesten Algorithmen zur Bestimmung von Primzahlen ist das Sieb des Eratosthenes, bei dem nacheinander aus einer Liste der natürlichen Zahlen diejenigen Zahlen gestrichen werden, die Vielfache der jeweils kleinsten noch nicht gestrichenen Zahl sind. Dadurch bleiben die Primzahlen innerhalb der Ausgangsliste übrig.
Schon Euler gab die Formeln $n^{2}+n+17$ und $n^{2}-n+41$ an, die für $0\leq n<16$ bzw. $0\leq n<41$ Primzahlen liefern. Auch für größere Werte von $n$ liefern die beiden Formeln viele Primzahlen, weil das Ergebnis nie durch Primzahlen $p<17$ bzw. $p<41$ ganzzahlig teilbar ist. Allgemein gibt es viele solche Formeln $an^{2}+bn+c$, wodurch sich die auffällige Ulam-Spirale erklärt. Es gibt aber nach Adrien-Marie Legendre kein Polynom, das für alle Werte der Variablen in den natürlichen Zahlen Primzahlen ergibt (auch nicht fast alle Primzahlen). Die Frage, welche ganzzahligen Polynome unendlich viele Primzahlen erzeugen, ist Gegenstand der Bunjakowski-Vermutung.
Die beliebteste ist die der Mersenne-Zahl $M_{n}=2^{n}-1$, bei der $M_{n}$ eine Primzahl ist. Durch die besonderen Eigenschaften der Teiler von Mersenne-Zahlen eignen sie sich für die Suche nach möglichst großen Primzahlen.
Fermat vermutete, dass alle Zahlen der Form $2^{2^{n}}+1$ prim sind; man nennt sie Fermat-Zahlen. Tatsächlich ist aber für $n>4$ keine derartige Primzahl bekannt.
Auch bekannt ist eine Anwendung des Satzes von Euklid, bei der zum Primorial $p\#$ (Produkt aller Primzahlen von 2 bis $p$) eine 1 addiert wird:
    $p\#+1=2\cdot 3\cdot 5\dotsm p+1$
$p\#+1$ ist prim für $p=2,3,5,7,11,31,379,1019,1021,\dotsc$ (Folge A005234 in OEIS) Es ist unbekannt, ob es unendlich viele Primzahlen gibt, die so erzeugt werden.

### Weitere Formeln

* $n!-1$ ist prim für $n=3,4,6,7,12,14,30,32,33,38,94,166,\dotsc$ (Folge A002982 in OEIS)
* $n!+1$ ist prim für $n=1,2,3,11,27,37,41,73,77,116,154,\dotsc$ (Folge A002981 in OEIS)
* Primzahlen der Form $\operatorname {kgV} (1,\dotsc ,n)+1$ sind: $2,3,7,13,61,421,2521,232792561,\dotsc$ (Folge A049536 in OEIS)
Nach dem Dirichletschen Primzahlsatz enthält eine arithmetische Folge $a\cdot m+b$ (wobei $a$, $b$ teilerfremd sind und $m$ die natürlichen Zahlen durchläuft) unendlich viele Primzahlen (aber auch zusammengesetzte Zahlen). Allerdings gibt es nach Ben Green und Terence Tao für jedes $k$ arithmetische Folgen (festgelegt durch $a,b$), die Primzahlen für $k$ aufeinanderfolgende Werte liefern. Zum Beispiel liefert:
    $43142746595714191+5283234035979900\cdot k$
Primzahlen für $k=0,\dotsc ,25$. Die Methode entspricht dem Fall linearer Polynome.

## Trivialer Generator

Ein trivialer Primzahlgenerator kann folgendermaßen induktiv definiert werden:
* $f(1)=2$
* $f(2)=3$
* für $n\geq 2$ ist $f(n+1)$ die auf $f(n)$ folgende Primzahl, wobei einfach alle Zahlen ab $f(n)+2$ aufsteigend darauf getestet werden, ob sie eine Primzahl sind.
Dieses Verfahren ist aber recht ineffektiv, da nacheinander alle ungeraden natürlichen Zahlen getestet werden müssen. Als Alternative bietet es sich an, mittels einer Siebmethode, z. B. Sieb des Eratosthenes oder Sieb von Atkin, eine genügend lange Liste von Primzahlen zu erstellen und diese dann bis zur gewünschten Primzahl zu durchlaufen. Dabei bestimmt man manchmal zunächst primzahlähnliche Mengen (Fastprimzahlen).

## Satz von Wilson

Eine nicht sehr praktikable Formel für alle Primzahlen beruht auf dem Satz von Wilson. Die Formel lautet unter Verwendung der Abrundungsfunktion:
    $f(n)=\left\lfloor {\frac {n!{\bmod {}n+1)}{n}}\right\rfloor (n-1)+2$ für natürliche Zahlen $n$
Nach dem Satz von Wilson ist $n+1$ prim genau dann, wenn $n!{\bmod {}n+1)=n$. Daraus folgt, dass die Formel nur Primzahlen liefert und jede Primzahl außer 2 genau einmal. Denn ist $n+1$ prim, so ist $\left\lfloor {\frac {n!{\bmod {}n+1)}{n}}\right\rfloor =1$ und $f(n)=n+1$. Ist $n+1$ nicht prim, so ist $\left\lfloor {\frac {n!{\bmod {}n+1)}{n}}\right\rfloor =0$ und $f(n)=2$.

## Diophantische Mengen für Primzahlen

Nach den Arbeiten zu Hilberts zehntem Problem gibt es ein System von endlich vielen diophantischen Gleichungen (Polynomen über den ganzen Zahlen), die als Lösung alle Primzahlen und nur diese haben. Nach Juri Wladimirowitsch Matijassewitsch sollte es so ein System mit neun oder weniger Variablen geben. James P. Jones und Kollegen gaben 1976 ein System von 14 Polynomen in 26 Variablen an. Explizit besteht das System aus den Gleichungen:
    $\alpha _{0}=wz+h+j-q=0$
    $\alpha _{1}=(gk+2g+k+1)(h+j)+h-z=0$
    $\alpha _{2}=16(k+1)^{3}(k+2)(n+1)^{2}+1-f^{2}=0$
    $\alpha _{3}=2n+p+q+z-e=0$
    $\alpha _{4}=e^{3}(e+2)(a+1)^{2}+1-o^{2}=0$
    $\alpha _{5}=(a^{2}-1)y^{2}+1-x^{2}=0$
    $\alpha _{6}=16r^{2}y^{4}(a^{2}-1)+1-u^{2}=0$
    $\alpha _{7}=n+\ell +v-y=0$
    $\alpha _{8}=(a^{2}-1)\ell ^{2}+1-m^{2}=0$
    $\alpha _{9}=ai+k+1-\ell -i=0$
    $\alpha _{10}=((a+u^{2}(u^{2}-a))^{2}-1)(n+4dy)^{2}+1-(x+cu)^{2}=0$
    $\alpha _{11}=p+\ell (a-n-1)+b(2an+2a-n^{2}-2n-2)-m=0$
    $\alpha _{12}=q+y(a-p-1)+s(2ap+2a-p^{2}-2p-2)-x=0$
    $\alpha _{13}=z+p\ell (a-p)+t(2ap-p^{2}-1)-pm=0$
mit den Variablen $a,\dotsc ,z$. Dann und nur dann, wenn eine Lösung in natürlichen Zahlen existiert, ist die Variable $k+2$ eine Primzahl.
Das lässt sich auch in eine Ungleichung zusammenfassen:
    $(k+2)(1-\alpha _{0}^{2}-\alpha _{1}^{2}-\cdots -\alpha _{13}^{2})>0$
Wenn man für die einzelnen Variablen natürliche Zahlen einsetzt, ist $k+2$ genau dann eine Primzahl, wenn die Ungleichung erfüllt ist.
Es gibt auch ein die Primzahlen (und nur diese) erzeugendes System von $n$ diophantischen Gleichungen mit nur zehn Variablen, allerdings mit sehr hohem Grad (in der Größenordnung $10^{45}$). Nach Thoralf Skolem kann man auch immer ein solches System mit nur Polynomen höchstens vierten Grades finden, allerdings ist in diesem Fall die Zahl der Variablen sehr hoch (mindestens 58, soweit bekannt). Die Methoden sind bisher von keinem praktischen Nutzen.

## Formel von Mills

W. H. Mills zeigte 1947, dass es eine reelle Zahl $A$ gibt, sodass
    $\left\lfloor d_{n}\right\rfloor =\left\lfloor A^{3^{n}}\right\rfloor$
für alle natürlichen Zahlen $n$ prim ist. Man kann unter Annahme der Riemannschen Vermutung zeigen, dass das kleinste solche $A$ (die sogenannte Mill’sche Konstante) einen Wert von etwa $1{,}3063778838630806904686144926\dots$ hat. Die mit der Formel erzeugten Primzahlen heißen Mills-Primzahlen: $\left\lfloor d_{1}\right\rfloor =2$, $\left\lfloor d_{2}\right\rfloor =11$, $\left\lfloor d_{3}\right\rfloor =1361.$ Da über $A$ wenig bekannt ist (noch nicht einmal, ob die Konstante rational oder irrational ist), hat die Formel aber keinen praktischen Wert.

## Formel von Wright

Eine ähnliche Formel wie die von Mills fand E. M. Wright. Wright zeigte, dass es eine reelle Zahl $\alpha$ gibt, sodass
    $\left\lfloor g_{n}\right\rfloor =\left\lfloor 2^{\dots ^{2^{2^{\alpha }}}}\right\rfloor$
prim ist für alle $n\geq 1$.
Dabei ist $g_{n}$ rekursiv definiert:
    $g_{0}=\alpha$
    $g_{n+1}=2^{g_{n}}$ für $n\geq 0$
Wright gab mit $\alpha =1{,}9287800\dots$ auch die ersten Dezimalstellen von $\alpha$ an. Das ergibt die Primzahlen $\left\lfloor g_{1}\right\rfloor =\left\lfloor 2^{\alpha }\right\rfloor =3$, $\left\lfloor g_{2}\right\rfloor =13$ und $\left\lfloor g_{3}\right\rfloor =16381$. Es zeigt sich, dass mit einem Wert von $\alpha \approx 1{,}9287800$
    $\left\lfloor g_{4}\right\rfloor =\left\lfloor 2^{2^{2^{2^{\alpha }}}}\right\rfloor =19139664204631104...822015417386540$
(die Punkte bedeuten 4900 nicht dargestellte Dezimalstellen) eine Zahl mit 4932 Dezimalstellen ist, die aber gerade (das heißt, keine Primzahl) ist, das heißt, dieser Wert von $\alpha$ muss leicht korrigiert werden. Für die folgenden Primzahlen braucht man noch weit mehr Dezimalstellen.
Da die Formel auf der Kenntnis von $\alpha$ beruht, ist sie praktisch ebenso nutzlos wie die von Mills.

## Conways Primzahlgenerator

Für die primzahlerzeugende Maschine (PRIMEGAME) von John Horton Conway siehe FRACTRAN. Die Methode ist allerdings ebenfalls nicht praktikabel zur Generierung von Primzahllisten.

## Primzahlgenerator für endliche Primzahlmengen

Ross Honsberger gibt einen einfachen Beweis für folgenden Satz:
Man teile die ersten $n$ Primzahlen beliebig auf zwei disjunkte Mengen $A,B$ auf, sodass $A\cup B=\{2,\dotsc ,p_{n}\}$. Sei $a$ das Produkt der Elemente von $A$ und $b$ das der Elemente von $B$. $A$ darf auch leer sein, dann ist $a=1$ (leeres Produkt). Falls nun $a+b<p_{n+1}^{2}$, dann ist $a+b$ eine Primzahl, und $|a-b|$ ist prim, wenn $1<|a-b|<p_{n+1}^{2}$.
Beispiel: $p_{n}=5$ (betrachtet werden dann nur Zahlen kleiner als $p_{n+1}^{2}=7^{2}=49$):
    $2\cdot 3+5=11,\quad 2\cdot 3-5=1$
    $2\cdot 5+3=13,\quad 2\cdot 5-3=7$
    $3\cdot 5+2=17,\quad 3\cdot 5-2=13$
    $2\cdot 3\cdot 5+1=31,\quad 2\cdot 3\cdot 5-1=29$
Zweites Beispiel: $p_{n}=11$ (betrachtet werden dann nur Zahlen kleiner als $p_{n+1}^{2}=13^{2}=169$):
    $2\cdot 11+3\cdot 5\cdot 7=127$
    $3\cdot 5\cdot 11-2\cdot 7=151$
Jedoch sind
    $3\cdot 5+2\cdot 7\cdot 11=169,$
    $2\cdot 3\cdot 5\cdot 11-7=323$
nicht kleiner als 169 und daher nicht prim.