Formel zur Berechnung von Primzahlen und zur Optimierung von Brute-Force-Teilern

GrĂŒĂŸe! Ich beschloss nach Belieben, das Problem der Suche nach Primzahlen zu untersuchen. Das Thema ist umfangreich und interessant. Ich möchte ein paar Gedanken darĂŒber teilen, die mir in den Sinn kamen. Eine Suche im Internet ergab keine solchen Hinweise auf ihre OriginalitĂ€t.

Erstens habe ich nie eine mathematische Formel gefunden, um Primzahlen der Reihe nach zu berechnen. Wenn es jedoch Algorithmen gibt, ist es sicherlich möglich, Formeln mit logischen Funktionen oder Operatoren zu erstellen. Ich gebe unten die prÀgnanteste Formel an, die sich herausstellte.

FĂŒr eine Folge von Zahlen ( X m ) = x 1 , x 2 , x 3 , . . . x m a x Wir stellen den Operator der Erkennung der ersten Zahl gleich a vor:

\ mathbf {Dt_ {a}} (x_ {m}): = \ left \ {\ begin {matrix} m \ \ mathbf {if} \ \ muss \ m: \ forall \, k <m \ x_ {k} \ neq a \ \ mathbf {und} \ x_ {m} = a \\ 0 \ \ mathbf {andernfalls} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ end {matrix} \ right.

\ mathbf {Dt_ {a}} (x_ {m}): = \ left \ {\ begin {matrix} m \ \ mathbf {if} \ \ existiert \ m: \ forall \, k <m \ x_ {k } \ neq a \ \ mathbf {und} \ x_ {m} = a \\ 0 \ \ mathbf {andernfalls} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ end {matrix} \ right.


Alle Primzahlen, beginnend mit 5, können nach folgender Formel berechnet werden:

Pn=Pn−1+2 mathbfDti0( mathbfDtj0((Pn−1+2i))modPj+1)),    foralln geqslant3 forallimax geqslant max fracP alpha−P alpha−12+10 ,,  2 leqslant alpha leqslantn−1;  jmax= pi( sqrtPn−1+2i)−1


Betreiber  mathbfDtj0 iteriert vorbei j der Rest der Division jeder Kandidatennummer durch Einfachheit mit i Nummer (Pn−1+2i) zu Primzahlen, die bereits im Bereich bis zu gefunden wurden Pjmax+1 . Die Kandidatennummern werden in der Reihenfolge aus dem Satz ungerader Zahlen ausgewĂ€hlt, die grĂ¶ĂŸer als die vorherige Primzahl sind Pn−1 .  pi( sqrtPn−1+2i) Ist eine pi-Funktion, die die Anzahl der Primzahlen anzeigt  leqslant sqrtPn−1+2i .
Betreiber  mathbfDti0 iteriert vorbei i Bedienerausgabewerte  mathbfDtj0 bis es 0 findet. Da die Reihe der Primzahlen unendlich ist, wird dies frĂŒher oder spĂ€ter geschehen. Am Ausgang des Betreibers  mathbfDti0 Es wird also immer eine Nummer geben i . Untergrenze imax wird durch die maximale Differenz benachbarter Primzahlen bestimmt, die kleiner als die gewĂŒnschte sind. Die Zunahme dieser Differenz erfolgt logarithmisch. Die folgende Grafik zeigt die AbhĂ€ngigkeit des maximalen und durchschnittlichen Wachstums  DeltaP alpha von n fĂŒr die ersten 100.000 Primzahlen. Der Maximalwert wurde abgetastet und fĂŒr jeweils tausend Zahlen gemittelt. Bild
Die maximale Zunahme der Differenz der Primzahlen  deltamax( DeltaP alpha) zum vorherigen Maximalwert max( DeltaP alpha) gleich 20 (fĂŒr die Differenz der Primzahlen 31397-31469 = 72 in Bezug auf die Differenz 25523-25471 = 52). Es ist in der Region, in der die Ableitung des HĂŒllkurvenlogarithmus erfolgt  DeltaP alpha immer noch groß genug und Primzahlen sind nicht mehr zu klein. Basierend auf diesem Wert wird die Bedingung fĂŒr imax . Grafik  deltamax( DeltaP alpha) fĂŒr die ersten 50.000 Primzahlen unten angegeben. Die Werte wurden fĂŒr jeweils tausend berechnet. Bild
Der Peak ist bei 20 sichtbar. Mit zunehmendem n geht der Graph auf Minus und zeigt eine Abnahme der Wachstumsrate großer Primzahlen.

Die zweite Überlegung besteht darin, die Berechnung einer Folge von Primzahlen zu optimieren.
Der in der obigen Formel festgelegte Algorithmus ist eine verbesserte Methode zum AufzĂ€hlen von Teilern. Verbesserungen bestehen darin, gerade Zahlen von der Betrachtung auszuschließen und die Teilbarkeit nur von Primzahlen zu ĂŒberprĂŒfen, die kleiner als sq sind. die Wurzeln der Kandidatennummern. Der schwierigste Teil des Algorithmus ist die Berechnung des Satzes der verbleibenden Mod- Funktionen. Durch die Optimierung dieser Funktion kann die KomplexitĂ€t reduziert werden. Es gibt jedoch einen noch effektiveren Weg. Lass (rn−1j+1)=r2,r3,...r pi( sqrtPn−1) Ist eine Folge von Resten aus der Aufteilung der zuletzt gefundenen Primzahl in Primzahlen von 3 bis zur Wurzel. Wir werden Sequenzen der Form machen

(rni,j+1)=(r2+2i)modP2,(r3+2i)modP3,...(r pi( sqrtPn−1)+2i)modP pi( sqrtPn−1),(Pn−1+2i)modP pi( sqrtPn−1+2i)

in der Reihenfolge ab i=1 . Der letzte Term wird berechnet, wenn  pi( sqrtPn−1+2i) neq pi( sqrtPn−1) . Wenn in einem Schritt der Berechnung der Rest rni,j+1 wird gleich 0, gehe zur nĂ€chsten Sequenz. Dies geschieht, bis i gefunden wird, bei dem alle RĂŒckstĂ€nde ungleich Null sind. Dies bedeutet, die nĂ€chste Primzahl zu finden. Sequenz (rnj+1) Es muss gespeichert werden, bis die nĂ€chste Primzahl gefunden wird. Die wiederkehrende Formel zur Berechnung von Primzahlen auf diese Weise wird konvertiert in:

Pn=Pn−1+2 mathbfDti0( mathbfDtj0(rni,j+1)),    foralln geqslant3


In dem vorgestellten Algorithmus wird die Operation mod erleichtert: teilbar durch (rj+1+2i)/Pj+1 mal mehr TrennwĂ€nde. Die einzigen Ausnahmen sind das Auftreten neuer einfacher Teiler. Im Computerspeicher ist es bei der Implementierung des Algorithmus erforderlich, ein Array von Primzahlen an der Wurzel des gesuchten sowie ein variables Array von Residuen zu speichern. Die KomplexitĂ€t des Algorithmus im allgemeinen Sinne (der Arbeitsaufwand) kann geringer sein als die anderer bekannter Methoden. Die komplexesten Operationen darin sind die Extraktion der Quadratwurzel, die Berechnung von Resten und die Multiplikation. Die Wurzel kann auf die nĂ€chste ganze Zahl extrahiert werden. Um RĂŒckstĂ€nde zu erhalten, können Sie einen effektiven Algorithmus verwenden, der auf der allgemeinen Teilbarkeitsregel basiert. Die Multiplikation wird nur mit 2 relativ kleinen Zahlen i verwendet . Die zeitliche KomplexitĂ€t des Algorithmus kann reduziert werden, indem die Arbeit gemĂ€ĂŸ den Werten von i verteilt wird . Das auf diese Weise erhaltene segmentierte Sieb sollte auf Multithread-Computern schneller funktionieren. Die geleistete Arbeit wird jedoch aufgrund der Erhöhung der Dividenden grĂ¶ĂŸer sein. Sie können die Radfaktorisierung auch auf den Algorithmus „schrauben“. Mit der optimalen GrĂ¶ĂŸe der RĂ€der kann dies die KomplexitĂ€t in einem bestimmten Bereich von n reduzieren - bis die Hardware "wild" es verlangsamt.

Vielleicht wird jemand meine Gedanken nĂŒtzlich machen.

Source: https://habr.com/ru/post/de472036/


All Articles