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

.128013:pbv(4i2+edm3s7= 1o5w_lSnatf-)h]6,crg.*[yPku/050l0k0B0A0h0x0o0r0J0x0A0o0o0q010B0h0c010406050o0S0m0m0A0K0P040y0t0x0S0.0t0z050T0^0`0|0~0?0c04171e051h0T1h1j1e0?0l0h0e0$0(0*0,0F0h0L0F0x1x0F0B0;050X0d0x0k1s0)0+011w1y1A1y0B1G1I1E0B0d0t0l0~1F0K1f0B0F0$110o0c0A0z0,0i011K1u010C0Z0k0z0A0m0k1E1,1.1?1M1_1I1|1~0;0a0r0Q0K0t0c0t0o0h140z0r0V1*0K0K0k0J2j17210z1f0T1(2w0B1$1#1%0l230,1A0z1{2g1E1p1r0%1L2G0h2I0z1Y1q1E0c2p1f2u2w2!0@1-2k2O1@2T0K0{0x0;0s2t2(0=2%222*1M2,2.0;0i2=1.2@2u2F012|0A2/040n302v0?332`0,36380g3b322(343h0;0u3k3d3m3f350t2-370;0H3r2^2)1t2{3w2}040p3k1g2Y172M2z0l2D340J1Y1 1f3O1i3M2$182?053T0V2Z3t3E3g0;0C0A2r3w0h0k0x1I0w1~0m3k0r3C340t0;0q3}3 3u0:040O3K3e3,010m0h2:4a3+2P01470G3r063s2_4c0R0;0V0C4h4q4j0v0;3~3#31454c0z0C3.3:0B3=3@1I4w3D4j470f4O3n0;164C2v4E4Q0;0E0b3r0r4)3~4b4j4s040C3w444,2+0;0h4=4i1@0t4z042R4`4x2+0d0;0K1.0L0k4T460;4S4X3*522{5404265a4c4R5l4j0z4I3;0K3?3^0k3`0k3|5e4Z1@470E0I514P4@044W2!4+4{1M41040j5G344e4g5A4?1M5D4%5e064*5%5M5g3-4/4J4L5v5x5z2$5X0,5P0M5o5I0A0c0c1{0l5`5Y5c615+4_5e5)5H5O0;0N5S3u5q5,5s5u3_3{644k0;495W5N656d4c5P0D6s4j5U042;6p5*6m040G0E4(4*5B1M4.2p0B0S0K5K2?684U6g4K5t4M5w6k6B690,476o5=6q354V6l4l3B0T3(0k2w2X6=3N1q3P2z2B2x1X1Z2z0A1H6^0T3O0?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.337:pbvà(4i2+edmx3;s7= 1Ejo5w_lSnatf)h]R6qcrg,.*[éyPkuè/050n0m0H0G0j0D0s0v0P0D0G0s0s0u010H0j0d010406050s0!0o0o0G0Q0X040E0z0D0!0`0z0F0v020G0o0d0r0v0M0m140Q0O0!0m0s050$111315170 0d041v1C051F0$1F1H1C0 0n0j0f0/0;0?0^0K0j0R0K0D1V0K0H0}050*0e0D0m1Q0=0@011U1W1Y1W0H1(1*1$0H0e0z0n171%0Q1D0H0K0/1a0s0d0G0F0^0k011,1S010I0,0m0F1i0m1$27292e1.2h1*2k0o2m040a0v0Y0Q0z0d0z0s0j1d1f0(250Q0Q0m0P2H1v2o0F1D0$232T0H2120220n2q0^1Y0F2j2E1$1N1P0:1-2%0j2)0F1}1O1$0d2M1D2R2T2~10281f2/2f2@0Q140D0}0w2Q320~312p341.36380}0k3c293e2R2$013j0G39040q3n2S0 3q3h0^3t3v0i3y3p323r3E0}0A3H3A3J3C3s0z373u0}0N3O3f331R3i3T3k040t3H1E2|1v2-2W0n2!3r0P1}2w0%1O1D2{0m2}3d3+3@0(3 3g3#0^0Z0}0(0I3+3B46010B0}0v4c3Q4e0F0I0}0e2B0P150n4j452:010|040h4u3!4w0F0}0F0C140p4B3r4y0S3H4i4d4D0}0o4H0G4J1w404Q2f4y0J0c3O0v4)4P4k4R042M110D0*0H4O3Z3r0z0}0u4@4Z1.4y0V0L4(4*4^3R48040I3T4}4,354F5b4v2f0z4g042=5f4C350e0}0Q290R0m4K3R4y4A4X3o554l4F4U4W2~4+5g1.4`040l5m3r0o0j3a5v4e4#4%5z3z4*5Y5H5n1.57590Q5N3R4E040o5*4e5i0}5l5W045!3K5p4.5s5u5@5B4w5x5S4-4T4I5/4w5K5M5@5_3R5P5R5 4~0^5U535Z5Z602f570j4b6b6n3i0}0I0G2O3T0j0m0D1*634!0}5y306h3s5e6g5c4 0}0J675h0}6a5G6t0^6e043b6s6J5K0u4|6#6N3D4S6R5J0}0U6.6,5-6E6O045V2~066l6~546J5,4/0!4;0G4?6M5I0^5K0T6^6?0G0d0d2j4t785#6i6G6H4Y6+6K040F7d4x0}4N6*797r5.7k4L6P6Q5@6}707q572M0H0!0Q7t7y7l7r7375776|1v423~3,7Z0$3/1v0H3;7(2Y2U1|1~2W0G1)7#3/1B447R2M4T6w0Z0m0C0K0q0}1n1p1r1t0v6{401I3e1C0Y0G740v0x0Q0n0b0.0G250F0y2N7M0Q0W0v1r000,0v0F000m0p0j0s0H1+860v2X0z8E0v0s1a1c0j1e0.0g0/1+2{0z1)0#2v880v0h0i0S0A0J0S8%0A0S0w0w0J0v0)8%0t0S0t8=1E3e7$0)0+0-04.