Salutations! J'ai décidé à loisir de rechercher le problÚme de la recherche des nombres premiers. Le sujet est vaste et intéressant. Je veux partager quelques réflexions à ce sujet qui me sont venues à l'esprit. Une recherche sur Internet n'a pas révélé de tels éléments, soulignant leur originalité.
PremiÚrement, je n'ai jamais trouvé de formule mathématique pour calculer l'ordre des nombres premiers. Mais aprÚs tout, s'il existe des algorithmes, il est certainement possible de composer des formules à l'aide de fonctions logiques ou d'opérateurs. Je donne ci-dessous la formule la plus concise qui s'est avérée.
Pour une séquence de nombres
( X m ) = x 1 , x 2 , x 3 , . . . x m a x on introduit l'opérateur de détection du premier nombre égal à a:
\ mathbf {Dt_ {a}} (x_ {m}): = \ left \ {\ begin {matrice} m \ \ mathbf {if} \ \ existe \ m: \ forall \, k <m \ x_ {k } \ neq a \ \ mathbf {et} \ x_ {m} = a \\ 0 \ \ mathbf {sinon} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ end {matrix} \ right.
\ mathbf {Dt_ {a}} (x_ {m}): = \ left \ {\ begin {matrice} m \ \ mathbf {if} \ \ existe \ m: \ forall \, k <m \ x_ {k } \ neq a \ \ mathbf {et} \ x_ {m} = a \\ 0 \ \ mathbf {sinon} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ end {matrix} \ right.
Tous les nombres premiers, commençant par 5, peuvent ĂȘtre calculĂ©s par la formule:
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
Opératrice
mathbfDtj0 itĂšre sur
j le reste de la division de chaque numéro de candidat par simplicité avec
i nombre
(Pnâ1+2i) aux nombres premiers dĂ©jĂ trouvĂ©s dans la gamme jusqu'Ă
Pjmax+1 . Les numéros des candidats sont sélectionnés dans l'ordre parmi l'ensemble des nombres impairs supérieurs au nombre premier précédent
Pnâ1 .
pi( sqrtPnâ1+2i) Est une fonction pi montrant le nombre de nombres premiers
leqslant sqrtPnâ1+2i .
Opératrice
mathbfDti0 itĂšre sur
i valeurs de sortie de l'opérateur
mathbfDtj0 jusqu'à ce qu'il trouve 0. Puisque la série de nombres premiers est infinie, cela se produira tÎt ou tard. A la sortie de l'opérateur
mathbfDti0 donc il y aura toujours un certain nombre
i . Limite inférieure
imax est déterminé par la différence maximale de nombres premiers adjacents inférieurs à celui souhaité. L'augmentation de cette différence se produit logarithmiquement. Le graphique ci-dessous montre la dépendance de la croissance maximale et moyenne
DeltaP alpha Ă partir de
n pour les 100 000 premiers nombres premiers. La valeur maximale a été échantillonnée et moyenne pour chaque millier de nombres.

L'augmentation maximale de la différence des nombres premiers
deltamax( DeltaP alpha) à la valeur maximale précédente
max( DeltaP alpha) Ă©gal Ă 20 (pour la diffĂ©rence des nombres premiers 31397-31469 = 72 par rapport Ă la diffĂ©rence 25523-25471 = 52). C'est dans la rĂ©gion oĂč la dĂ©rivĂ©e du logarithme de l'enveloppe
DeltaP alpha encore assez grand, et les nombres premiers ne sont plus trop petits. Sur la base de cette valeur, la condition pour
imax . Graphique
deltamax( DeltaP alpha) pour les 50 000 premiers nombres premiers indiqués ci-dessous. Les valeurs ont été calculées pour chaque millier.

Le pic est visible Ă 20. Avec l'augmentation de
n, le graphique passe Ă moins, montrant une diminution du taux de croissance des grands nombres premiers.
La deuxiÚme considération est d'optimiser le calcul d'une séquence de nombres premiers.
L'algorithme présenté dans la formule ci-dessus est une méthode améliorée pour énumérer les diviseurs. Les améliorations consistent à exclure les nombres pairs de la considération et à vérifier la divisibilité des nombres premiers uniquement inférieurs à sq. les racines des numéros des candidats. La partie la plus difficile de l'algorithme est le calcul de l'ensemble des fonctions
mod restantes. La complexitĂ© peut ĂȘtre rĂ©duite en optimisant cette fonction. Cependant, il existe un moyen encore plus efficace. Soit
(rnâ1j+1)=r2,r3,...r pi( sqrtPnâ1) Est une sĂ©quence de rĂ©sidus de la division du dernier nombre premier trouvĂ© en nombres premiers de 3 Ă la racine de celui-ci. Nous allons faire des sĂ©quences du formulaire
(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)
dans l'ordre Ă partir de
i=1 . Le dernier terme est calculé si
pi( sqrtPnâ1+2i) neq pi( sqrtPnâ1) . Quand Ă une Ă©tape du calcul, le reste
rni,j+1 devient égal à 0, passez à la séquence suivante. Cela se fait jusqu'à ce que l'on trouve
i , oĂč tous les rĂ©sidus sont non nuls. Cela signifie trouver le prochain nombre premier. SĂ©quence
(rnj+1) il doit ĂȘtre enregistrĂ© jusqu'Ă ce que le prochain nombre premier soit trouvĂ©. La formule rĂ©currente pour calculer les nombres premiers de cette maniĂšre est convertie en:
P_ {n} = P_ {n-1} +2 \ mathbf {Dt_ {0} ^ {i}} (\ mathbf {Dt_ {0} ^ {j}} (r_ {i, j + 1} ^ {{ n})), \ \ \ \ forall \, n \ geqslant 3
Dans l'algorithme présenté, le mode de fonctionnement
est facilité: divisible par
(rj+1+2i)/Pj+1 fois plus de sĂ©parateurs. Les seules exceptions sont l'apparition de nouveaux diviseurs simples. En mĂ©moire informatique, lors de la mise en Ćuvre de l'algorithme, il est nĂ©cessaire de stocker un tableau de nombres premiers Ă la racine du recherchĂ©, ainsi qu'un tableau variable de rĂ©sidus. La complexitĂ© de l'algorithme au sens gĂ©nĂ©ral (la quantitĂ© de travail) peut ĂȘtre infĂ©rieure Ă celle des autres mĂ©thodes connues. Les opĂ©rations les plus complexes sont l'extraction de la racine carrĂ©e, le calcul des rĂ©sidus et la multiplication. La racine peut ĂȘtre extraite Ă l'entier le plus proche. Pour obtenir des rĂ©sidus, vous pouvez utiliser un algorithme efficace basĂ© sur la rĂšgle gĂ©nĂ©rale de divisibilitĂ©. La multiplication n'est utilisĂ©e que par 2 nombres relativement petits
i . La complexitĂ© temporelle de l'algorithme peut ĂȘtre rĂ©duite en rĂ©partissant le travail selon les valeurs de
i . Le tamis segmenté obtenu de cette maniÚre devrait fonctionner plus rapidement sur les ordinateurs multithreads. Cependant, le travail effectué sera plus important en raison de l'augmentation des dividendes. Vous pouvez également «visser» la factorisation des roues sur l'algorithme. Avec la taille optimale des roues, cela peut réduire la complexité dans une certaine plage de
n - jusqu'à ce que le matériel "wilds" le ralentisse.
Peut-ĂȘtre que quelqu'un viendra en aide Ă mes pensĂ©es.