Aller au contenu

Crible d'Ératosthène (1)

Le cadre

Un crible est une technique qui permet de répondre sur les caractéristiques d'entiers, non pas un à la fois, mais sur plusieurs à la fois. Il existe des cribles pour autre chose que les nombres premiers.

Propriété importante : un entier \(n>1\) est toujours multiple d'un nombre premier, parfois lui-même uniquement. C'est cette propriété que nous allons utiliser pour justifier le fonctionnement du crible d'Ératosthène. On va marquer les multiples des nombres premiers, le plus petit entier non marqué sera donc un nombre premier.

Le crible d'Ératosthène permet de déterminer les nombres premiers jusqu'à un certain nombre \(n\) fixé. La démarche avec un papier et un crayon est la suivante :

  • On écrit tous les entiers jusqu'à \(n\).
  • On raye \(0\) et \(1\) qui ne sont pas premiers.
  • On répète jusqu'à avoir traité tous les nombres :
    • Le prochain nombre non traité est un nombre premier ; on l'entoure.
    • On raye tous les autres multiples de ce nombre.

Crible d'Ératosthène

Algorithme décrit pour Python

Avec Python, pour chercher les nombres premiers jusqu'à n inclus :

  • On construit un tableau de n + 1 booléens crible, initialement tous égaux à True.
  • On modifie crible[0] et crible[1] à False ; \(0\) et \(1\) ne sont pas premiers.
    • ⚠ Pour 1, il faut vérifier avant que n > 0.
  • On parcourt ce tableau de gauche à droite. Pour chaque indice p :
    • Si crible[p] vaut True : le nombre \(p\) est premier.
      • On donne la valeur False à toutes les cellules de crible dont l'indice est un multiple de p, on commence avec 2 * p, puis 3 * p, etc, jusqu'à la fin du tableau.
    • Sinon, crible[p] vaut False : le nombre p n'est pas premier. On n'effectue aucun changement sur le tableau.

Utilisation : On peut établir ensuite la liste des nombres premiers jusqu'à n en filtrant les indices des cellules de crible valant True.

Astuce

L'expression Python range(2 * p, n + 1, p) permet d'itérer sur tous les multiples de p, de 2 * p inclus à n inclus.

Exercice

Coder une fonction ératosthène :

  • qui prend en paramètre un entier naturel n,
  • et qui renvoie le tableau crible de taille n + 1 contenant des booléens, crible[p] indique si p est premier.

Coder une fonction premiers_jusque :

  • qui prend en paramètre un entier naturel n,
  • et qui renvoie la liste des nombres premiers jusqu'à \(n\) inclus.
Exemples
>>> ératosthène(5)
[False, False, True, True, False, True]
>>> ératosthène(6)
[False, False, True, True, False, True, False]
>>> premiers_jusque(5)
[2, 3, 5]
>>> premiers_jusque(6)
[2, 3, 5]
>>> premiers_jusque(20)
[2, 3, 5, 7, 11, 13, 17, 19]
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /
.128013],59/fTq78r;nb _o=ylaepcwgu)*vd46F13kRméhtsP(S0+à2è[ji:050F0w0Q0v0$0u0R0p0y0u0v0R0R0s010Q0$0x010406050R0B0N0N0v0l0t040U0r0u0B0{0r0n050f12141618100x04051o1h1r0f1o100F0$0E0:0=0@0_0P0$0A0P0u1F0P0Q0~050+0o0u0w1A0?0^011E1G1I1G0Q1O1Q1M0Q0l1p0Q0P1S1C010g0-0w0n0v0N0w010:1b0R0x0v0n0_0Y1M1}1 1-1U1:1Q1?1^0~0a0p0S0l0r0x0r0R0$1e0n0p0)1{0l0l0w0y2m1h240n1p0f1+2z1(1*1)1N0F260_1I0n1=2j1M1x1z0;1T2J0$2L0n0r2P1M0x2s1p2x2z2%111~2n2R1.2W0l150u0~0p0J2w2+0 2*252-1U2/2;2?0Y2_1 2{2x2I01300v2=040p0K342y10372~0_3a3c0p0G3g362+383m2?0d3q3i3s3k390r2:3b2?0H3x2|2,1B2 3C313d0j3H3j3K3l3M3E3d0k3Q3z3S3B3D3n0e3Y2}3!3u040J0V3)3J2S3#3N0J2^1i2`3y3*3=3,0J333`353|3;2.3U3c0J3f423h3I3t470~0J3p4b3r3}463$4g3w4j444e4n3-3G4q4d3A3 3P4w3R3~4f3-3X4B3Z4D4t0J3(4j1s2#1h2P2C0F1*2H3A0y2X1_1p4R1q4P2)4N4X0)2$4I1.0L0~0)0g3q4x3!0z2?4?4C2.0g0~0O0l0v0Q2j1+0Z2L4{4-1U0}040T584l2 0~1g4N4|5a0~0C0%3x0p5q0p4@3=0R2204010M1=0E0r0$1R0B2n1#0w0v0B2o1R2n0W2@0p0o0r1b0O1=0R015p5r5t2.0~0y0l0$1P0w3q5s5k0_0r0~0s5,5!5l040!5e451U0L0y0~0h0l0B5+5j590_5b0b5?5.015:040D6a66015b5d655f3l5h6g6m6c0~0W6p5|0_0N0$4g5{385b0C5Y5q5@6n045%5)1Q6A3A5b5`6l6v016x0~3/6Q6B0~694j5-6h6d5=6!6G015~0~0I3b0R642%065r6#6q4/040$4=6)6b0n6o6~6$0~020A0Q0m6u386T046V2)6b5b5o4q6@6@6*706I5(5*6M3!6O7q3=7b3_7e6h68793A6%7A3!6,046.0.6;3{7k6b6`0g3C7D3~0~0x7Q1.0r4_6{5i2%6^6R0n0o0~510n0A7J356*6j7t5#047Z2`7#386d6t726q7v7;5^5n6E7j6*6`6|7U5g7n6K7-2y7/0~6P7x6q7m7T6W6N6Y885/7X0$0R8o6+5 04616380670~7h6=7j8E7_4W0J0~030p0x0p0w0R0Q8L2s6x0w0l838F8G7E0~7O8V7}7$0~0L8k7!6*7W0~2U8t7%7)1 7,8z6i0~6k8h6R7b418,6b6d6f8%3t7S8_5b0c8;719173047|9d7~6y3-980~9a954y978l7r5m8C7K8X8F7l5$7o6L9r3=7s9C7=8*9l046Z9h6R7C9o7E8v7H6:83857)0*0B0l7@358Y7R8a7p4q064r3A6`4;8_7X5s9F2 4~042!0w8T0l0R0q0#0B0R0i8y9=8A5c8_7m9Z8d7f9t9T6b5v0~5y5A5C1R0=0p1I8P1R0)0/2W0N0o2s0/9_9{0/9 a10B000X0p2n2U0;a05X7i5Z6 9z8b8t9N9L96045052540P568c4,6q7:a4399c2`8e046DaL6FaN9^8S5D9|aQ5;8t9E8}aT8+7^9U048#9b9^aQ8qa93d7l7(047*8^a(a%a}9p7?a_9f8t7 bf5m8t866}aSbi6J9(bh9s5_a79qbx9D6Y9K9va:6h6`2s0Q9Xb89#7=axa@8s4w0f4*0w2z9_2z4#2A4T1h2Db%0v5*bZ1y2{0f0)0+0-0R04.