Aller au contenu

Vérification de la décomposition en facteur premier

Le cadre

On peut décomposer un entier naturel non nul en produit de facteurs premiers, comme :

  • \(10 = 2×5\)
  • \(9 = 3×3\)
  • \(8 = 2×2×2\)
  • \(7 = 7\), un produit avec un seul facteur

Pour \(1\), on peut dire que le produit est vide, et qu'il vaut bien \(1\).

On s'apprête bientôt à coder des versions d'une fonction de décomposition en facteurs premiers.

🐍 Script Python
assert factor(1) == []
assert factor(7) == [7]
assert factor(8) == [2, 2, 2]
assert factor(9) == [3, 3]
assert factor(10) == [2, 5]
assert factor(11) == [11]
assert factor(12) == [2, 2, 3]
assert factor(4953851) == [7, 7, 17, 19, 313]
assert factor(600851475143) == [71, 839, 1471, 6857]
assert factor(14837457737) == [1471, 1471, 6857]

On aimerait pouvoir vérifier le résultat :

  1. La liste doit être triée dans l'ordre croissant. (En théorie, on accepte tout ordre, mais pour notre exercice, on veut vérifier !)
  2. Chaque facteur doit être premier.
  3. Le produit des facteurs doit être égal au nombre initial.

Exercice

Coder une fonction vérification

  • qui prend en paramètres :
    • un entier naturel non nul n,
    • une proposition facteurs de décomposition en facteurs premiers : une liste d'entiers naturels,
  • et qui renvoie un booléen
    • True si les 3 critères sont respectés,
    • False sinon.

👍 On pourra utiliser librement la [fonction est_premier vue précédemment, disponible pour cet exercice.

###(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/f78r;nb _o=ylaepcwgu)vd*46F13kméhtsP(S02-i:050B0t0M0s0U0r0N0m0v0r0s0N0N0p010M0U0u010406050N0y0J0J0s0i0q040Q0o0r0y0:0o0k050e0`0|0~100^0u04051g191j0e1g0^0B0U0A0(0*0,0.0L0U0x0L0r1x0L0M0?050Z0l0r0t1s0+0-011w1y1A1y0M1G1I1E0M0i1h0M0L1K1u010f0#0t0k0s0J0t010(130N0u0s0k0.0S1E1=1@1#1M1(1I1+1-0?0a0m0O0i0o0u0o0N0U160k0m0X1:0i0i0t0v2e191|0k1h0e1Z2r1W1Y1X1F0B1~0.1A0k1*2b1E1p1r0)1L2B0U2D0k0o2H1E0u2k1h2p2r2V0_1?2f2J1$2O0i0}0r0?0m0G2o2Z0@2Y1}2#1M2%2)2+0S2.1@2:2p2A012^0s2*040m0H2|2q0^2 2?0.32340m0D382~2Z303e2+0c3i3a3k3c310o2(332+0E3p2;2!1t2@3u2_350g3z3b3C3d3E3w350h3I3r3K3t3v3f0d3Q2=3S3m040G0R3X3B2K3T3F0G2-1a2/1k2T192H2u0B1Y2z3s0v2P1.1h3@1i3=2X3/2}053}0X2U3R3*0I0?0X0f3i3A300w2+4h3J3*0k0f0?0A0K0i0U1(0v0s2n452q4i3s0=040P4m4b2$0?184A4a3Y3*4E0V3i0m4C3Z0l0?2M0M4H4O1$4E0b4S4U4o0?0f0s2m0t0y0i0N4!3)4$0?4R4M4T4n2$4W041A0N4Z4M4*4_040z4)4~1M0o0?0T020x0M0j5a4I2@500l0o134@304Q3p0m5v4}5l3d0?2S2P0y2d5k4#5c0?0p5F4^1M0J0U0?3.2V065w5x5G5z042S2l0n0u5K305d045J4|565M5O043%4M065S5w5,0.4d040f3u5$3s0k5A5~3S0o4k042M624+5{4.0M4:4=5r4D4`5u5T5@5b5_4X4g5+6l014E4G556q644K0o542V5U5L5W0t535!2k5N0t0i6f3S6s6L695#6u5y6r0?0z596p6S6w045}6X5V6T4F6O4J5X681$5(020r5i6-2@5A2k0v5!6*1M4E0z4{5R6j726B305`2k0M4;4L6A5^010I0v0?0F330N0t6i727c605X280B5D6z2/743s5(5*7b6q7o5B7r5E6$6C015(0C6?5W6Q71737n6^5Z7M7u7c7x7K31615;5?5v7c760Y797W7B7q7s7W7x7y7T7A4K3z0e480t2r5Y2r412s3_192v810s1H7`3?1q2:0e0X0Z0#0N04.