Nombre premier⚓︎

Un nombre premier est un entier positif qui admet exactement deux diviseurs entiers et positifs distincts : \(1\) et lui-même. Ainsi :

  • \(0\) n'est pas premier car il est divisible par tous les entiers non nuls ;
  • \(1\) n'est pas premier car il n'admet que lui même comme diviseur ;
  • \(2\) est premier car il n'est divisible que par \(1\) et \(2\) ;
  • \(6\) n'est pas premier car il admet quatre diviseurs : \(1\), \(2\), \(3\) et \(6\).
Divisibilité

\(a\) est divisible par \(b\) si le reste de la division euclidienne de \(a\) par \(b\) vaut \(0\).

Avec Python l'expression a % b est alors évaluée à 0.

Cette définition permet de formuler un test de primalité simple. Considérons un nombre entier positif \(n\) :

  • Si \(n\) est strictement inférieur à \(2\), il n'est pas premier ;
  • Sinon, si \(n\) est divisible par l'un des entiers compris entre \(2\) et \(\sqrt{n}\) (inclus l'un et l'autre), alors il n'est pas premier ;
  • Dans le cas contraire, \(n\) est premier.

On demande d'écrire la fonction est_premier qui prend en paramètre un entier \(n\) positif ou nul et renvoie True si ce nombre est premier, False dans le cas contraire.

Deux versions, construites autour de boucles for ou while, sont proposées.

Exemples
>>> est_premier(0)
False
>>> est_premier(1)
False
>>> est_premier(2)
True
>>> est_premier(3)
True
>>> est_premier(4)
False
>>> est_premier(31)
True
Version avec une boucle for

Une première approche consiste à utiliser une boucle for afin de parcourir tous les diviseurs potentiels de \(n\) entre \(2\) et \(\sqrt{n}\) (inclus l'un et l'autre).

La fonction permettant de calculer la racine carrée d'un nombre positif fait partie du module math. Elle est importée au début de cette version de l'exercice : from math import sqrt.

Attention toutefois, cette fonction renvoie toujours un nombre flottant : sqrt(5) est évalué à environ 2.23606797749979.

On peut néanmoins arrondir ce résultat à l'entier inférieur ou égal en utilisant int : int(sqrt(5)) est évalué à 2.

On rappelle de plus que l'instruction range(5, 12) parcourt les entiers entre 5 (inclus) et 12 (exclu).

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.339.8722.128013lS^etdA5!f18%umag,_F/R=in{ 6)yàqPhcL\(bsx.p;r4'C90"ov+Tw73êk:é }2I030c0a0b0m0u070K0*0F070m0K0K0t0V0b0u0N0V020x030K0k0l0l0m0P0A02080W070k110W0v0*000m0l0N0O0*0s0a1b0P0C0k0a0K030r181a1c1e160N02031J1C1M0r1J160c0u0X0_0{0}0 0E0u0n0E071!0E0b14030;0J070a1V0|0~0V1Z1#1%1#0b1,1.1*0b0P1K0b0E0_1h0K0N0m0v0 0,0V1:1X0V0g0?0a0v1p0a1*26282d1=2g1.2j0l2l02060*0D0P0W0N0W0K0u1k1m0/240P0P0a0F2G1C2n0v1K0r222S1 21201+0c2p0 1%0v2i2D1*1S1U0`1;2$0u2'0v0W2+1*0N2L1K2Q2S2|17271m2-2e2=0P1b07140*0h2P30152 2o321=3436380,3b283d2Q2#0V3i0m37020*0$3m2R163p3g0 3s3u0*0Q3y3o303q3E380e3I3A3K3C3r0W353t380y3P3e311W3h3U3j3v0#3Z3B3$3D3'3W3v0i3+3R3-3T3V3F0T3?3f3^3M020h0U3I1N2`1C2+2V0c212!3S0F2?2v0.1T1K2_0a2{3c444e0/4m3~2.0V0'0v140g2A0l3I0*3!3L4w021b224B4D3S4v140u1q3U0b4J3,4t4F0K0C0P4R1D3c0x4$4K3^0'140/0g4S3@4U0g141A0b0p4k0l0u0a0P444T2e13020I4}4.33140v534s4 140z0(3P0*5f4C4~1=4)020u4,4!3n5h543h564-591=0W1400070b0O5u3#4t4_143l5o2R4'4t505d5J155g5R5q5v0 5k2L0b0k0P575P5T5E2e0'0F140q3t0K0a5e5g5L5(4x3U5D3L4*5_3S0W0!4N5#2|5%3L0J140P280n5/5P5=1=50526b5i0 5G025I2~6h0V500o5|3 655l0v4Z6m5r0 6e585'5s024W4Y6B3q6A6g6y3r5t6K5U6o5b0z6r4t5x020Y6T2e6j3a6O6C6z5b5O2|0x5S5;6n5k5m6Y6D613c635}140j6;3D5{5$6c0 6V0t0t6|0V6j436$6I146)4#6,6,704u660:5Z6?5p7g5)5+5-6a6*5R7n7i5Y5!757o020Z0P1z3Z0r4p4l457H0r481C0b4a7M2Y2T0m1-7J481I4r6%0V2L0l0p0g0m0'0a0p0E0$141u1w1y1A0*7c3n1N3d1J0G1/0b4=0*2_2B2D0)0*0u0F0u0*7~0a0L1 0%2u2u6v0*7C1S8f0;0u2L0M0*0-070*2'7 0a1j7 0|0*0%1 1/4_0^2i0*040k0X2L0*0c280^1.0_8y2I0n670v0c0^2=0l0J2L8E6v4`0P0K0M7^7W0d0*118B8L0R8a1v0N1.0o881m0g0)8J8'0*0,0U0,0Q8`8P8^0k0^8T282!8Y8!1/4^904e0v0v0k880K0b6^3^1c2F0E4H8a140H0I0,090w0i0,0H0o0e0i0T9F0T0$0$0+0*05390H6S5P8o0x0S1/9e8K0K0R0)0F0P2F0*0m0X2M9q4t9s229v0L9x9z0Q9F0i0y9E0o0U0Q0i9S4B0F1Z0g4y7;8F0J0|1/7g9:9u0m7}9?029y42a29U8+1L020d0N8^0u1y0)1/0B0_9Y0W8Z2L960m0*0l0)224f7 2A2C0Kaw84868s9%1A2E7}679)2i0X8m1l9.2eae9=9@0H6F0b0w9A9C9}9H9J0o9L9N9P390+am620X0)9(2g0Fag0u1l8)0M8o9X8saB9f0*9#9%9(9p9+9-980^2Iadbhafah9@0h9E9T624_071%b68L1/a45ma70^0fao7K0:0=0@02.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.339.8722.128013lS^etdA5!f18%umag,_F/R=in{ 6)yàqPhcL\(bsx.p;r4'C90"ov+Tw73êk:é }2I030c0a0b0m0u070K0*0F070m0K0K0t0V0b0u0N0V020x030K0k0l0l0m0P0A02080W070k110W0v0*000m0l0N0O0*0s0a1b0P0C0k0a0K030r181a1c1e160N02031J1C1M0r1J160c0u0X0_0{0}0 0E0u0n0E071!0E0b14030;0J070a1V0|0~0V1Z1#1%1#0b1,1.1*0b0P1K0b0E0_1h0K0N0m0v0 0,0V1:1X0V0g0?0a0v1p0a1*26282d1=2g1.2j0l2l02060*0D0P0W0N0W0K0u1k1m0/240P0P0a0F2G1C2n0v1K0r222S1 21201+0c2p0 1%0v2i2D1*1S1U0`1;2$0u2'0v0W2+1*0N2L1K2Q2S2|17271m2-2e2=0P1b07140*0h2P30152 2o321=3436380,3b283d2Q2#0V3i0m37020*0$3m2R163p3g0 3s3u0*0Q3y3o303q3E380e3I3A3K3C3r0W353t380y3P3e311W3h3U3j3v0#3Z3B3$3D3'3W3v0i3+3R3-3T3V3F0T3?3f3^3M020h0U3I1N2`1C2+2V0c212!3S0F2?2v0.1T1K2_0a2{3c444e0/4m3~2.0V0'0v140g2A0l3I0*3!3L4w021b224B4D3S4v140u1q3U0b4J3,4t4F0K0C0P4R1D3c0x4$4K3^0'140/0g4S3@4U0g141A0b0p4k0l0u0a0P444T2e13020I4}4.33140v534s4 140z0(3P0*5f4C4~1=4)020u4,4!3n5h543h564-591=0W1400070b0O5u3#4t4_143l5o2R4'4t505d5J155g5R5q5v0 5k2L0b0k0P575P5T5E2e0'0F140q3t0K0a5e5g5L5(4x3U5D3L4*5_3S0W0!4N5#2|5%3L0J140P280n5/5P5=1=50526b5i0 5G025I2~6h0V500o5|3 655l0v4Z6m5r0 6e585'5s024W4Y6B3q6A6g6y3r5t6K5U6o5b0z6r4t5x020Y6T2e6j3a6O6C6z5b5O2|0x5S5;6n5k5m6Y6D613c635}140j6;3D5{5$6c0 6V0t0t6|0V6j436$6I146)4#6,6,704u660:5Z6?5p7g5)5+5-6a6*5R7n7i5Y5!757o020Z0P1z3Z0r4p4l457H0r481C0b4a7M2Y2T0m1-7J481I4r6%0V2L0l0p0g0m0'0a0p0E0$141u1w1y1A0*7c3n1N3d1J0G1/0b4=0*2_2B2D0)0*0u0F0u0*7~0a0L1 0%2u2u6v0*7C1S8f0;0u2L0M0*0-070*2'7 0a1j7 0|0*0%1 1/4_0^2i0*040k0X2L0*0c280^1.0_8y2I0n670v0c0^2=0l0J2L8E6v4`0P0K0M7^7W0d0*118B8L0R8a1v0N1.0o881m0g0)8J8'0*0,0U0,0Q8`8P8^0k0^8T282!8Y8!1/4^904e0v0v0k880K0b6^3^1c2F0E4H8a140H0I0,090w0i0,0H0o0e0i0T9F0T0$0$0+0*05390H6S5P8o0x0S1/9e8K0K0R0)0F0P2F0*0m0X2M9q4t9s229v0L9x9z0Q9F0i0y9E0o0U0Q0i9S4B0F1Z0g4y7;8F0J0|1/7g9:9u0m7}9?029y42a29U8+1L020d0N8^0u1y0)1/0B0_9Y0W8Z2L960m0*0l0)224f7 2A2C0Kaw84868s9%1A2E7}679)2i0X8m1l9.2eae9=9@0H6F0b0w9A9C9}9H9J0o9L9N9P390+am620X0)9(2g0Fag0u1l8)0M8o9X8saB9f0*9#9%9(9p9+9-980^2Iadbhafah9@0h9E9T624_071%b68L1/a45ma70^0fao7K0:0=0@02.
Version avec une boucle while

Le calcul d'une racine carrée est coûteux. Il est possible de s'en passer en observant que si \(d\) est un entier positif tel que \(d \le \sqrt{n}\) alors on a nécessairement \(d^2 \le n\).

Cette observation permet de parcourir tous les diviseurs souhaités à l'aide d'une boucle while.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.339.8722.128013lS^etdA5!f18%umag,_F/R=in{ 6)yàqPhcL\(bsx.p;r4'C90"ov+Tw73êk:é *}2I030c0a0b0m0u070K0*0F070m0K0K0t0V0b0u0N0V020x030K0k0l0l0m0P0A02080W070k120W0v0*000m0l0N0O0*0s0a1c0P0C0k0a0K030r191b1d1f170N02031K1D1N0r1K170c0u0X0`0|0~100E0u0n0E071#0E0b15030=0J070a1W0}0 0V1!1$1'1$0b1-1/1+0b0P1L0b0E0`1i0K0N0m0v100-0V1;1Y0V0g0@0a0v1q0a1+27292e1?2h1/2k0l2m02060*0D0P0W0N0W0K0u1l1n0:250P0P0a0F2H1D2o0v1L0r232T2022211,0c2q101'0v2j2E1+1T1V0{1=2%0u2(0v0W2,1+0N2M1L2R2T2}18281n2.2f2?0P1c07150h2Q3116302p331?3537150-3b293d2R2$0V3i0m38020$3m2S173p3g103s3u0Q3x3o313q3D150e3G3z3I3B3r0W363t150y3N3e321X3h3S3j020#3X3A3!3C3$3U020i3)3P3+3R3T3u0T3G1O2{1D2,2W0c222#3Q0F2@2w0/1U1L2`0a2|3c3{450:4d3f3?0'150:0g3G0*3Y3J0g151B0b0p4b0l0u0a0P3{3*2/0V14020I4D3=4F0v150v4K4j4F4H0z0(3N0*4X4q4E2f4l020u4o1E3c4Z4L344O4p4r3Q0W1500070b0O4/4!1?4z3k4Q3Z4S154V4)3n0x4Y584+4R4#152M0b0k0P4P552S5a514#0F150q3t0K0a4W4Y4:3?4N020c4{4,1?4=020t5B5b4}0u4 5j16585w4F4$0!1!1/5H5m3h4m5V3q5E0+0+5Z3Q4~023l5M5l5!4?4^0O5G5,5P4-025i2 4|104H542}57594X5@1?4$4'5'5x4.5?5|0V5E0j684M5Y6b5C105E0t5=2}5-5(5K020U503q5~5u625O6c4$5e5g5`4*64100'5o025q0^5t5M61626H3r6i6p6S5E0Y6o6G6c5)3a6P6A6k0V6C0;6E6g5n150Z0P1A3X0r4g4c3|6`0r3 1D0b416 2Z2U0m1.6|3 1J4i5W102M0l0p0g0m0'0a0p0E0$151v1x1z1B0*5 4e1Q3d1K0G1:0b4v0*2`2C2E0)0*0u0F0u0*7B0a0L200%2v2v0v0b0*6=1T7S0=0u2M0M0*0.070*2(7C0a1k7C0}0*0%201:4z0_2j0*040k0X2M0*0c290_1/0`7/2J0n0P290c0_2?0l0J2M7^7T4A0P0K0M1O7w020d0*127=7 0R7N1w0N1/0o7L1n0g0)7}8i0*0-0U0-0Q8z838x0k0_87897)0W8d7~4y8F450v0v0k7L0K7U6S1d2G0E1c7A0L150H0I0-090w0i0-0H0o0e0i0T8`0T0$0$0,0*050*0h0H0z3G7$0x0S1:8c8e1:0K0R0)0F0P2G0*0m0X2N6q3?8)238,7N8/8;0Q8`0i0y8_0o0U0Q0i984p0F1!0g0g8f8A0*0J0}1:8(9m9v0m8-9y0h0U9J5M8l7v790d0N8x0u1z0)1:0B0`9e8T9g8L0m0*0l0)23467C2B2D0K9:7H7J7)9k1B2F7A889n2j0X7!1m9s4F9u8+9Y9x028:0H0K0C0P0b0w8=8@9E8|8~0o909294960,9%6p0X0)9m2h0F9Y0u1m8k0M7$9d8S8U9h9j9l9n9p9r8N0_2J9V8*9w8.ap0I0h8_995,4z071'aR7 1:9L4'9O7r0f8m176}0;0?0^02.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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 : 5/5

.339.8722.128013lS^etdA5!f18%umag,_F/R=in{ 6)yàqPhcL\(bsx.p;r4'C90"ov+Tw73êk:é *}2I030c0a0b0m0u070K0*0F070m0K0K0t0V0b0u0N0V020x030K0k0l0l0m0P0A02080W070k120W0v0*000m0l0N0O0*0s0a1c0P0C0k0a0K030r191b1d1f170N02031K1D1N0r1K170c0u0X0`0|0~100E0u0n0E071#0E0b15030=0J070a1W0}0 0V1!1$1'1$0b1-1/1+0b0P1L0b0E0`1i0K0N0m0v100-0V1;1Y0V0g0@0a0v1q0a1+27292e1?2h1/2k0l2m02060*0D0P0W0N0W0K0u1l1n0:250P0P0a0F2H1D2o0v1L0r232T2022211,0c2q101'0v2j2E1+1T1V0{1=2%0u2(0v0W2,1+0N2M1L2R2T2}18281n2.2f2?0P1c07150h2Q3116302p331?3537150-3b293d2R2$0V3i0m38020$3m2S173p3g103s3u0Q3x3o313q3D150e3G3z3I3B3r0W363t150y3N3e321X3h3S3j020#3X3A3!3C3$3U020i3)3P3+3R3T3u0T3G1O2{1D2,2W0c222#3Q0F2@2w0/1U1L2`0a2|3c3{450:4d3f3?0'150:0g3G0*3Y3J0g151B0b0p4b0l0u0a0P3{3*2/0V14020I4D3=4F0v150v4K4j4F4H0z0(3N0*4X4q4E2f4l020u4o1E3c4Z4L344O4p4r3Q0W1500070b0O4/4!1?4z3k4Q3Z4S154V4)3n0x4Y584+4R4#152M0b0k0P4P552S5a514#0F150q3t0K0a4W4Y4:3?4N020c4{4,1?4=020t5B5b4}0u4 5j16585w4F4$0!1!1/5H5m3h4m5V3q5E0+0+5Z3Q4~023l5M5l5!4?4^0O5G5,5P4-025i2 4|104H542}57594X5@1?4$4'5'5x4.5?5|0V5E0j684M5Y6b5C105E0t5=2}5-5(5K020U503q5~5u625O6c4$5e5g5`4*64100'5o025q0^5t5M61626H3r6i6p6S5E0Y6o6G6c5)3a6P6A6k0V6C0;6E6g5n150Z0P1A3X0r4g4c3|6`0r3 1D0b416 2Z2U0m1.6|3 1J4i5W102M0l0p0g0m0'0a0p0E0$151v1x1z1B0*5 4e1Q3d1K0G1:0b4v0*2`2C2E0)0*0u0F0u0*7B0a0L200%2v2v0v0b0*6=1T7S0=0u2M0M0*0.070*2(7C0a1k7C0}0*0%201:4z0_2j0*040k0X2M0*0c290_1/0`7/2J0n0P290c0_2?0l0J2M7^7T4A0P0K0M1O7w020d0*127=7 0R7N1w0N1/0o7L1n0g0)7}8i0*0-0U0-0Q8z838x0k0_87897)0W8d7~4y8F450v0v0k7L0K7U6S1d2G0E1c7A0L150H0I0-090w0i0-0H0o0e0i0T8`0T0$0$0,0*050*0h0H0z3G7$0x0S1:8c8e1:0K0R0)0F0P2G0*0m0X2N6q3?8)238,7N8/8;0Q8`0i0y8_0o0U0Q0i984p0F1!0g0g8f8A0*0J0}1:8(9m9v0m8-9y0h0U9J5M8l7v790d0N8x0u1z0)1:0B0`9e8T9g8L0m0*0l0)23467C2B2D0K9:7H7J7)9k1B2F7A889n2j0X7!1m9s4F9u8+9Y9x028:0H0K0C0P0b0w8=8@9E8|8~0o909294960,9%6p0X0)9m2h0F9Y0u1m8k0M7$9d8S8U9h9j9l9n9p9r8N0_2J9V8*9w8.ap0I0h8_995,4z071'aR7 1:9L4'9O7r0f8m176}0;0?0^02.