Nombre de zéros de n! (2)

On rappelle que, pour \(n\) un entier naturel, la factorielle de \(n\) se note \(n!\) et se définit comme le produit des entiers de \(1\) à \(n\).

  • \(0! = 1\), comme un produit vide.
  • \(1! = 1\)
  • \(2! = 1×2 = 2\)
  • \(3! = 1×2×3 = 6\)
  • \(11! = 1×2×3×4×5×6×7×8×9×10×11 = 39916800\)
  • \(42! = 1405006117752879898543142606244511569936384000000000\)

On constate que

  • \(3!\) se termine par aucun zéro.
  • \(11!\) se termine par 2 zéros.
  • \(42!\) se termine par 9 zéros.

Construire une fonction, tel que nb_zeros_factorielle(n) renvoie le nombre de zéros se trouvant à la droite dans l'écriture décimale de \(n!\), pour \(n\) entier inférieur à \(10^{18}\).

Exemples
>>> nb_zeros_factorielle(3)
0
>>> nb_zeros_factorielle(11)
2
>>> nb_zeros_factorielle(42)
9
###(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 : 10/10
.128013s3_èuf^vIy n7aêS1me(P24C:jtwi][h*)6Oo;bcdgx/0làqAp!.rL-,}=+zk5R{é050P0t0B0o0D0U0b0l0O0U0o0b0b0*010B0D0Y010406050b0f0s0s0o0#0k040q0L0U0f150L0m0l020o0s0Y0M0l0/0t1f0#0W0f0t0b050S1c1e1g1i1a0Y041G1N051Q0S1Q1S1N1a0P0D0i0}0 11130G0D0Q0G0U1*0G0B18050^0N0U0t1#1012011)1+1-1+0B1?1^1;0B0N0L0P1i1=0#1O0B0G0}1l0b0Y0o0m130w011`1%010g0`0t0m1t0t1;2i2k2p1|2s1^2v0s2x040a0l0v0#0L0Y0L0b0D1o1q0?2g0#0#0t0O2S1G2z0m1O0S2e2(0B2c2b2d0P2B131-0m2u2P1;1Y1!0~1{2=0D2@0m281Z1;0Y2X1O2$2(391b2j1q2}2q320#1f0U180r2#3d193c2A3f1|3h3j180w3n2k3p2$2;013u0o3k040c3y2%1a3B3s133E3G0x3J3A3d3C3P180.3S3L3U3N3D0L3i3F180J3Z3q3e1$3t3(3v040n3S1P371G2{2+0P2/3C0O282H0=1Z1O360t383o3_420?4a3r3:130-180?0g3_3M4h010C180l4n3#4p0m0g180m0N0d0,0t2M0b0d0g0o2Z3(0D0t0U1^4u4g2~0117040u4Q3/4S0m4z4X3C4U0I0z3Z0l4,4t4o4Z182X1c0U0^0B3S4.4v4S0L180*4`3.3C0s0D180T4+4-523$4!040Y0f0D110d3Y1H3o4{4R2q4~04505k3z5m4Y2q543X584,5a4p4j040C1)4P5s2%5u3V185e5g4G5j395K3$5p024@0M5r5R5B4:040m4$3$4U4*5I194-5.5S4w4;1E0f4@0o4_5,5:4}180+5Y5l5!3g4#5{621|5p0S0S514/635d5f5h5Q3o065/596c3t5M6f5P6b4|5o180H605t66135x046h3z6j6l6s1|5D2X0B0f0#5%656m3O5=4?4^3-0S4d493`6X0S3}1G0B3 6$2-2)27292+0o1@6Z3}1M4f5v1|2X0s4H0o0-0t0d0G0c181y1A1C1E0l5+3b1T3p1N0y0@0B1_0s0;2e430l0b1_0Q0;0m0;0#3F5g1_2O6L0l0P7j4E542@0#0l0 0l0i3F0f5_0D1p5|2q1g2R0G1f7g0R18090u0Y090I3S0%0o1Y767z000f1q2u154E7P1|7R2e7U0t7W047Y0m7#3S0!1P7c1j0D7?137^7T5_7{7X0u7 7$5{1E0B0l7.0l7:4M7F2v6K2X0U0(8m8j6y01897`7|7Y7!8g5R8l320s0N2X0l48544E8u7H0g3=5@1_2U0$0t0Q2u0P8K0P1p2@7G007{2O0b2k8j2U8x8z8b8B7Z805{0P2k0|7H7A421u2P2R7N7/1q4I2Z0t7y8M8o7z1_8;0#7S8A8d0m0Z8_39827b1X1Z3C8=7V7X0F0i0d0Y8e0Z0I0l0*0l091I0d0:0-0*0r0)0h0:09300g0B0k0)9F0U0g0U0L3(9F0g7t0O0:0m0)0:0Y0h0-9V090#9Y9!7F9E099X9Z9#099%4J9*9,0Y9;9?9}7F0+9W9@9~a09)9+9-0h0wa5aba8aaa79$9(a2ag0cajana9090O8$0B0b090E3|461a5@3p1-040$0o7m0L1e1_0b001g0#0p7g0l1w0B0L0f8}777g3i770b1p8j0m5@0|0V8L1g157F0P7-3e4E0^300l7t0m0Q9oaI1aaI9f9h8?8d9{akaoa10o9,0Nat9^9m5l8i7GaL2j0#7;8m0m150e8#9e6P8y9g7_b87}0u0obj5t2{5g0;a;7Fb6bA9ubC0NbF2%0!0l0X0i2Y2K0k7k0m8u7O0Y998j2Q1u1^2Gbs0l4I0D8K056W04aL690l0N1Gb^b20D3p0SaG6?7e8~8%1_7.1_8R0m2Z94bYb!839q2|4p1~1,1.1:6@3C2D2u2w182J0q0O9g0Y8j0vbZ0G1p3_486@3a4bb^8x5D4l5(4p4r044t5,8x4x187J1m7McFcUbx4U4Wc$6G6Q5$cP4S4U0(6r5n6n5dc.2q4(796i8xcR5.c_1|0b0P1801d61y0m0i0L4Mbm7I7Kc!1q0Y7(7*1D9d0l9k3-bxd34s4-0%dn8m0b8j8l8n7=8q6L4Ndpc+01drcSdt8Ldwdy1q8H8J7w6`8odFc?13dI5.d6015z873D6R5@6T6OdG5p6w5J8x6A575,6E5Abx5c5N5h0Yc=6^13d-d~5Lc^d?d0bx5D5F2te25b6o5O9yeb4p5U5Wd.cScV643bc%18c|6D6kd^dG5c4=d)5_eg5}045 eA6d6N5Zbx686ad+dVd%6eeed}e5etemeOd|eE676uekd$d`d#cM5=8reG61d_d(5^5`391a6V432(cHaD0i840Kdhb)7maP4E0ib=dm0O7fcb1pceb%aZ7F0L0N7g0mf38~0;908,937Ofk0U0eaV2ub:4J7g6L0|9b4E0|8:bx9t8cbC9kbR048u1f5g0l0oa!2Qf40L0t0g2s0O4Mbs0|0N30aN0DfN0R0l1C867n0}3F0O8Tb/0obW0O9d0|97aY9g4N1^0b9o1W1R040j0Uft0f8!aL0Aa!aVf=db7Fca7G5gaV2UdP4=8LdSfz0!gq0l0y8*dx0laY0f0Afb0|2,0e0|1n2tg0c20?a|0{04.
Indice 1
  • Il n'est pas possible de construire un tableau de tous les résultats.
  • Il faut penser décomposition en facteurs premiers de \(n!\).
  • Une divisibilité par \(10\) signifie la présence de \(2\) et \(5\) dans la décomposition.
  • Le nombre de zéros d'un nombre est le minimum de l'exposant de 2 et de celui de 5 dans la décomposition en facteurs premiers du nombre.
  • Pour \(n!\), le nombre de zéros est l'exposant de 5 qui est plus petit que l'exposant de 2.
Indice 2
  • Combien y a-t-il de multiples de 5 de \(1\) à \(n\) ? Chacun apporte un zéro.
  • Combien y a-t-il de multiples de 25 de \(1\) à \(n\) ? Chacun apporte un zéro supplémentaire.
  • Combien y a-t-il de multiples de 125 de \(1\) à \(n\) ? Chacun apporte un zéro supplémentaire.
  • Quand faut-il arrêter cette liste ? Et comment la générer ?
Indice 3
  • On utilisera une variable puiss_5 qui sera une puissance de 5.
  • La puissance suivante s'obtient avec puiss_5 *= 5.
  • Il y a n // k multiples de \(k\) de \(1\) à \(n\), par exemple :
    • Il y a 42 // 5 = 8 multiples de 5 de \(1\) à \(42\) : \(5\), \(10\), \(15\), \(20\), \(25\), \(30\), \(35\) et \(40\).
    • Il y a 42 // 25 = 1 multiple de 25 de \(1\) à \(42\) : \(25\).
    • Il y a 42 // 125 = 0 multiple de 125 de \(1\) à \(42\).
  • Il y a \(8+1+0=9\) zéros à la fin de \(42!\)