Problème de Brocard

Série d'exercices

Cet exercice fait partie d'une série :

Le problème de Brocard consiste à trouver tous les couples d'entiers (n, m) qui vérifie la solution suivante :

\(n!+1 = m^2\)

Queston 1

Factorielle

La factorielle d'un entier naturel \(n\), noté \(n!\), est le produit des nombres entiers strictement positifs qui sont inférieurs ou égaux à \(n\).

Soit: \(n! = 1×2×3×4×...×n\)

Ainsi :

  • \(0! = 1\), c'est un produit vide, donc égal à \(1\)
  • \(1! = 1\), c'est un produit avec \(1\) comme seul facteur.
  • \(2! = 1×2 = 2\)
  • \(3! = 1×2×3 = 6\)
  • \(4! = 1×2×3×4 = 24\)

La résolution du problème va demander de nombreux calculs de factorielle, ce qui risque d'être coûteux en temps : il est donc judicieux d'utiliser une variable pour enregistrer les valeurs intermédiaires.

Écrire la fonction factorielle qui prend en paramètre un nombre entier positif n et qui renvoie la factorielle de ce nombre, selon le principe suivant :

  • factorielle_mem est initialisé à [1] de sorte que \(0!\) est égal à factorielle_mem[0]
  • factorielle(n) fait plusieurs actions :
    • Elle remplit, si nécessaire, factorielle_mem avec une boucle.
    • Elle renvoie \(n!\) en utilisant factorielle_mem[n] qui sera donc de taille au moins n + 1 à la fin de l'appel.
Contraintes

Le module math est désactivé pour cet exercice.

Il est obligatoire de compléter au fur et à mesure la variable factorielle_mem.

Exemples
>>> factorielle(5)
120
>>> factorielle(10)
3628800

###(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

.128013s3o_bcdufvg/ly n7apS.r1-me,(P2=4:+twki][5h*)6050h0A0J0s0M0n0b0p0g0n0s0b0b0F010J0M0t010406050b0i0z0z0s0w0o040u0d0n0i0.0d0q050m0^0`0|0~0?0t04171e051h0m1h1j1e0?0h0M0k0$0(0*0,0Q0M0l0Q0n1x0Q0J0;050X0f0n0A1s0)0+011w1y1A1y0J1G1I1E0J0f0d0h0~1F0w1f0J0Q0$110b0t0s0q0,0E011K1u010j0Z0A0q0s0z0A1E1,1.1?1M1_1I1|1~0;0a0p0D0w0d0t0d0b0M140q0p0V1*0w0w0A0g2j17210q1f0m1(2w0J1$1#1%0h230,1A0q1{2g1E1p1r0%1L2G0M2I0q1Y1q1E0t2p1f2u2w2!0@1-2k2O1@2T0w0{0n0;0x2t2(0=2%222*1M2,2.0;0E2=1.2@2u2F012|0s2/040c302v0?332`0,36380G3b322(343h0;0P3k3d3m3f350d2-370;0T3r2^2)1t2{3w2}040r3k1g2Y172M2z0h2D340g1Y1 1f3O1i3M2$182?053T0V2Z3t3E3g0;0j0s2r3w0M0A0n1I0e1~0z3k0p3C340d0;0F3}3 3u0:040O3K3e3,010z0M2:4a3+2P01470N3r063s2_4c0L0;0V0j4h4q4j0K0;3~3#31454c0q0j3.3:0J3=3@1I4w3D4j470C4O3n0;164C2v4E4Q0;0S0H3r0p4)3~4b4j4s040j3w444,2+0;0M4=4i1@0d4z042R4`4x2+0f0;0w1.0l0A4T460;4S4X3*522{5404265a4c4R5l4j0q4I3;0w3?3^0A3`0A3|5e4Z1@470S0B514P4@044W2!4+4{1M41040I5G344e4g5A4?1M5D4%5e064*5%5M5g3-4/4J4L5v5x5z2$5X0,5P0v5o5I0s0t0t1{0h5`5Y5c615+4_5e5)5H5O0;0R5S3u5q5,5s5u3_3{644k0;495W5N656d4c5P0y6s4j5U042;6p5*6m040N0S4(4*5B1M4.2p0J0i0w5K2?684U6g4K5t4M5w6k6B690,476o5=6q354V6l4l3B0m3(0A2w2X6=3N1q3P2z2B2x1X1Z2z0s1H6^0m3O0?750W0Y0!04.
Queston 2

Écrire la fonction brocard qui prend en paramètres deux nombre entier positif n_max et m_max qui renvoie les couples qui vérifient la relation de Brocard, avec n compris entre 0 et n_max et m compris entre 0 et m_max

>>> brocard(15,15)
[(4, 5), (5, 11)]

Fonction chargée

Une version de la fonction factorielle est déjà chargée en mémoire.

###(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

.128013.337s3o_;èbcdufvg/lyàq n7apS.r1meh,(P2=4:+jtwki][5RE*x)é6050k0E0P0x0S0q0c0u0j0q0x0c0c0K010P0S0y010406050c0l0D0D0x0B0r040z0e0q0l0`0e0v0u020x0D0y0g0u0W0E140B0t0l0E0c050p111315170 0y041v1C051F0p1F1H1C0 0k0S0n0/0;0?0^0F0S0o0F0q1V0F0P0}050*0i0q0E1Q0=0@011U1W1Y1W0P1(1*1$0P0i0e0k171%0B1D0P0F0/1a0c0y0x0v0^0J011,1S010m0,0E0v1i0E1$27292e1.2h1*2k0D2m040a0u0I0B0e0y0e0c0S1d1f0(250B0B0E0j2H1v2o0v1D0p232T0P2120220k2q0^1Y0v2j2E1$1N1P0:1-2%0S2)0v1}1O1$0y2M1D2R2T2~10281f2/2f2@0B140q0}0C2Q320~312p341.36380}0J3c293e2R2$013j0x39040d3n2S0 3q3h0^3t3v0L3y3p323r3E0}0V3H3A3J3C3s0e373u0}0$3O3f331R3i3T3k040w3H1E2|1v2-2W0k2!3r0j1}2w0%1O1D2{0E2}3d3+3@0(3 3g3#0^0R0}0(0m3+3B46010Q0}0u4c3Q4e0v0m0}0i2B0j150k4j452:010|040H4u3!4w0v0}0v0f140Z4B3r4y0G3H4i4d4D0}0D4H0x4J1w404Q2f4y0!0M3O0u4)4P4k4R042M110q0*0P4O3Z3r0e0}0K4@4Z1.4y0U0T4(4*4^3R48040m3T4}4,354F5b4v2f0e4g042=5f4C350i0}0B290o0E4K3R4y4A4X3o554l4F4U4W2~4+5g1.4`040N5m3r0D0S3a5v4e4#4%5z3z4*5Y5H5n1.57590B5N3R4E040D5*4e5i0}5l5W045!3K5p4.5s5u5@5B4w5x5S4-4T4I5/4w5K5M5@5_3R5P5R5 4~0^5U535Z5Z602f570S4b6b6n3i0}0m0x2O3T0S0E0q1*634!0}5y306h3s5e6g5c4 0}0!675h0}6a5G6t0^6e043b6s6J5K0K4|6#6N3D4S6R5J0}0Y6.6,5-6E6O045V2~066l6~546J5,4/0l4;0x4?6M5I0^5K0A6^6?0x0y0y2j4t785#6i6G6H4Y6+6K040v7d4x0}4N6*797r5.7k4L6P6Q5@6}707q572M0P0l0B7t7y7l7r7375776|1v423~3,7Z0p3/1v0P3;7(2Y2U1|1~2W0x1)7#3/1B447R2M4T6w0R0E0f0F0d0}1n1p1r1t0u6{401I3e1C0I0x740u0X0B0k0b0.0x250v0O2N7M0B0#0u1r000,0u0v000E0Z0S0c0P1+860u2X0e8E0u0c1a1c0S1e0.0s0/1+2{0e1)0h2v880u0H0L0G0V0!0G8%0V0G0C0C0!0u0)8%0w0G0w8=1E3e7$0)0+0-04.