NOMBRES – Curiosités, Théorie et Usages

 

Accueil                           DicoNombre            Rubriques           Nouveautés      Édition du: 10/01/2022

Orientation générale        DicoMot Math          Atlas                   Actualités                       M'écrire

Barre de recherche          DicoCulture              Index alphabétique        Références      Brèves de Maths                      

     

Nombres PREMIERS

 

Débutants

Nombres

Premiers

ORDRE géométrique

 

Glossaire

Nombres

Premiers

 

 

INDEX

 

Nombres premiers – CRIBLES

 

Cribles (types)

Crible d'Ératosthène

Crible de Sundaram

Tableaux

Cercles et croix

Crible de la roue

Spirales d'Ulam

Carrés magiques premiers

Crible d'Atkin

Triangle de Klauber

Conjecture de Gilbreath

Méthode René Nève

 

Sommaire de cette page

>>> Approche

>>> Les trois théorèmes

>>> Cycle 60

>>> Programmation Python

>>> Programmation Maple

 

 

 

 

CRIBLE d'ATKIN

 

Critère de primalité, alternative au crible d'Ératosthène.

Méthode qui fait appel à des propriétés avancées de la théorie des nombres. Application d'une forme du second degré selon le reste de la division par 12. Utilisation de formes quadratiques en arithmétique modulaire à base 12.

Créé par A.O.L. Atkin et Danile J. Bernstein autour de l'an 2000.

  

 

 

Approche

 

Le crible d'Ératosthène élimine rapidement tous les nombres pairs, puis les multiples de 3, etc.

Le crible d'Atkin est plus puissant en allant chercher des propriétés des nombres au plus profond de la théorie des nombres.

 

 

Principe

Selon le reste de la division par k, examen d'une forme quadratique en x² et y².

La quantité de telles formes égalant n est un signe de la primalité de n.

Le crible se décline en l'application de trois théorèmes.

 

 

 

Les trois théorèmes

 

THÉORÈME 1

Si n est un entier positif sans facteur carré et tel que le reste de la division par 4 est 1,

 

alors n est premier si et seulement si la quantité de formes quadratiques 4x² + y²  = n est impaire avec x et y positifs.

 

 

 

 

Explications

 

Formulation du théorème par Atkin et Bernstein

 

Squarefree integer: nombres sans facteur carré, qui ne contient aucun facteur premier répété (cad. avec un exposant 2 ou plus).
Ex: 4 = 2² n'est pas sans carré comme l'est aussi 12 = 2² x 3.

 

1 + 4Z indique tous les nombres du type 4k + 1, nombres qui divisés par 4 ont un reste de 1.
Ex: 1, 5, 9, 13, … 
Voir Classes de congruences.

 

Ssi si et seulement si (iff :if and only if).

 

# est le symbole indiquant la quantité des éléments (ou cardinal).

On considère les couples x et y, nombres positifs,  tels que la somme quadratique 4x² + y² est égal à n. Si la quantité de telles sommes est impaire, alors le nombre n est premier. La réciproque est vraie aussi: un nombre premier sans facteur carré de la forme 4k + 1 induit une quantité impaire de formes quadratique 4x² + y² = 1.

 

Exemples

*      avec n = 13 ≡ 1 mod  4, la seule forme quadratique est 4×1² + 3² = 13, alors 13 est premier.

*      avec n = 25 ≡ 1 mod  4, mais ce nombre n'est pas sans facteur carré, il est composé.

*      avec n = 65 ≡ 1 mod  4, il y a deux formes quadratiques: 4×2² + 7² = 4×4² + 1², alors 65 est composé.

 

Démonstration

La démonstration est du niveau expert en théorie des nombres. Elle figure dans le papier original d'Atkin et Berntsein.

 

 

 

 

THÉORÈME 2

Si n est un entier positif sans facteur carré et tel que le reste de la division par 6 est 1,

 

alors n est premier si et seulement si la quantité de formes quadratiques 3x² + y²  = n est impaire avec x et y positifs.

 

 

 

Exemples

103 ≡ 1 mod 6 et  103 = 3×1² + 10²; Forme unique; 103 est premier.

109 ≡ 1 mod 6 et  109 = 3×6² + 1² ;   Forme unique; 109 est premier.

 

 

 

THÉORÈME 3

Si n est un entier positif sans facteur carré et tel que le reste de la division par 12 est 11,

 

alors n est premier si et seulement si la quantité de formes quadratiques 3x² – y²  = n est impaire avec x et y positifs et x supérieur à y.

 

 

 

Exemple

 

107 ≡ 11 mod 12 et cinq formes quadratiques; 107 est premier.

107 = 3 ×   6² –     = 108 – 1

107 = 3 × 11² – 16² = 363 – 256

107 = 3 × 13² – 20² = 507 – 400

107 = 3 × 38² – 65² = 4332 – 4225

107 = 3 × 46² – 79² = 6348 – 6241

    

 

 

 

Cycle 60

 

Les théorèmes impliquent des calculs mod 4, 6, 12 et 60.
Ce tableau montre les valeurs d'origine en mod 60.

 

 

Tous les nombres proposés par ces trois théorèmes sont des nombres premiers jusqu'à 60, sauf un intrus: 49 = 7². Ce qui montre qu'il faudra traiter le cas des nombres avec des facteurs carrés.

 

Le cycle 60 est justifié par le fait que tous les nombres jusqu'à 60 sont:

*      soit premiers (notre liste ci-dessus);

*      soit divisibles par 2, 3 ou 5 (éliminés rapidement); et

*      soit divisible par 7 ou plus  (un seul jusqu'à 60).

 

 

 

Programmation Python

 

def CA(nmax):

    if nmax > 2:

        print(2, end=" ")

    if nmax > 3:

        print(3, end=" ")

    crible = [False] * nmax

    for i in range(0, nmax):

        crible[i] = False

 

    x = 1

    while x * x < nmax:

        y = 1

        while y * y < nmax:        

            n = (4 * x * x) + (y * y)

            if (n <= nmax and (n % 12 == 1 or

                                n % 12 == 5)):

                crible[n] ^= True

 

            n = (3 * x * x) + (y * y)

            if n <= nmax and n % 12 == 7:

                crible[n] ^= True

 

            n = (3 * x * x) - (y * y)

            if (x > y and n <= nmax and

                    n % 12 == 11):

                crible[n] ^= True

            y += 1

        x += 1

 

    r = 5

    while r * r < nmax:

        for i in range (r * r, nmax, r * r):

            crible[i] = False

        r += 1

 

    for a in range(5, nmax):

        if crible[a]:

            print(a, end=" ")

            

# Principal

nmax = 130

CA(nmax)

 

 

But

Éditer la liste des nombres premiers jusqu'à nmax en utilisant le crible d'Atkin.

 

Commentaires

Fonction CA comme Cible Atkin.

Si nmax est supérieur à 3 imprimer 2 et 3 chacun suivi d'un espace (end).

Crible est une liste binaire que l'on initialise avec des valeurs "fausses", autant que nmax.

 

Balayage en x et en y pour identifier les formes quadratiques dans chacun des cas de résidu.

La valeur de la forme est n. Si n est dans la zone des nombres à explorer et si son modulo (%) 12 vaut (==) 1 ou 5, alors l'emplacement numéro n dans crible est modifié.

S'agissant de valeurs binaires, la modification consiste à faire un OU exclusif (^=) entre la valeur dans crible et la valeur vraie (True)*. Si la valeur est fausse, elle devient vraie et si elle est vraie, elle devient fausse. Soit une inversion (flip en anglais).

* Voir Opérateurs d'augmentation en Python

 

Idem pour les deux autres formes.

 

Le module suivant (r = 5, …) identifie les nombres avec  carrés et les élimine (aussi bine 5² que 5² × 7, etc.). On commence à 5 et on termine avant racine de nmax.

 

Jusqu'à présent on dispose d'une liste de nmax valeurs binaires témoignant du fait que le nombre est premier ou composé (True or False).

Le module suivant va identifier les valeurs vraies, les convertir en nombres et les imprimer. Notez que la condition est vérifiée avec la valeur vraie implicite (pas besoin de la spécifier).

 

 

Résultat

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127
 

Programme inspiré de celui produit par Geeksforgeeks

  

Voir Crible d'Ératosthène avec Python / Crible de la roue avec Python

 

 

Programmation Maple

 

 

 

But

Éditer la liste des nombres premiers jusqu'à nx en utilisant le crible d'Atkin.

 

Commentaires

Initialisation. Requête pour les 1000 plus petits nombres premiers en nx.

Déclaration d'un vecteur de tailla 1000, rempli avec la valeur "false". On utilise un vecteur plutôt qu'une liste du fait de la taille.

 

Balayage en x et en y pour identifier les formes quadratiques dans chacun des cas de résidu.

La valeur de la forme est n. Si n est dans la zone des nombres à explorer et si son modulo (mod) 12 vaut (=) 1 ou 5, alors l'emplacement numéro n dans crible est modifié.

S'agissant de valeurs binaires, la modification consiste à faire un OU exclusif (xor) entre la valeur dans crible et la valeur vraie (true). Si la valeur est fausse, elle devient vraie et si elle est vraie, elle devient fausse. Soit une inversion (flip en anglais).

Idem pour les deux autres formes.

 

Le module suivant (r = 5, …) identifie les nombres avec  carrés et les élimine. On commence à 5 et on termine avant racine de nmax.

 

Jusqu'à présent on dispose d'une liste de nx valeurs binaires témoignant du fait que le nombre est premier ou composé (true or false).

Le module suivant va identifier les valeurs vraies, les convertir en nombres et les imprimer.

 

Résultat

 

168 nombres premiers jusqu'à 1000

 

{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997}

                              168

 

Listing pour copier coller dans Maple

 

restart; nx := 100: S := array(1 .. nx, [false$nx]): x := 1: while x^2 < nx do y := 1: while y^2 < nx do n := 4*x^2+y^2; if n < nx and (`mod`(n, 12) = 1 or `mod`(n, 12) = 5) then S[n] := `xor`(S[n], true) end if; n := 3*x^2+y^2; if n < nx and `mod`(n, 12) = 7 then S[n] := `xor`(S[n], true) end if; n := 3*x^2-y^2; if x > y and n < nx and `mod`(n, 12) = 11 then S[n] := `xor`(S[n], true) end if; y := y+1 end do: x := x+1 end do: r := 5: while r^2 < nx do for i from r^2 by r^2 to nx do S[i] := false end do; r := r+1 end do: SS := {2, 3}: for j to nx do if S[j] = true then SS := {j, op(SS)} end if end do: SS; nops(SS);

 

Voir Crible d'Ératosthène avec Maple / Crible de la roue avec Maple
Voir
ProgrammationIndex

 

 

 

 

Voir

*      Crible d'Ératosthène

*      Crible de la roue

*      Méthode de René Nève

*      Nombres premiers en tableaux

*      Barre magique

*      Séquences en 6n

*      Crible d' Ératosthène

*      Nombres premiersIndex

Aussi

*      Liste de nombres premiers

*      Types de cribles

 

*      Crible de Moessner

*      Ératosthène

*      Nombres composés

*      Premiers en cercles et croix

*      Programmation du crible d'Ératosthène

*      Représentation des nombres

*      Spirale d'Ulam

Sites

*      Crible d'Atkin – Wikipédia

*      Prime Sieves using Binary Quadratic Forms – A.O.L. Atkin and D.J. Berstein

*      Sieve of Atkin – Geeksforgeeks – Programmes en Python, C++, Java, C#, PHP et Javascript

*      Quadratic sieve* – Wolfram MathWorld

Cette page

http://villemin.gerard.free.fr/Wwwgvmm/Premier/Atkin.htm