Formule de calcul des nombres premiers et d'optimisation des diviseurs de force brute

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. image
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. image
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.

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


All Articles