Aller au contenu

La suite de Syracuse⚓︎

Définition

La suite de Syracuse est définie de la manière suivante :

un+1={un/2si un est pair3un+1sinon

Comme nous l'avons vu l'année dernière, il est conjecturé qu'il existe toujours un rang n pour lequel un=1, pour n'importe quel entier strictement positif u0.

Plus d'informations ici :

Exercice 18: prochain(u)

Compléter le code de la fonction prochain qui prend en paramètre un entier non nul u et qui renvoie la valeur qui vient après u dans la suite de Syracuse.

>>> prochain(14)
7
>>> prochain(7)
22

def prochain(u):
if ...:
return ...
else:
return ...
# Tests
assert prochain(14) == 7
assert prochain(7) == 22
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wr%a*PlkSe=gn:5h/4po+b (d)uvis2mf3ytc10050z0k0K0e0D0h0E0x0L0h0e0E0E0l010K0D0t010406050E0B0G0G0e0c0J040j0u0h0B0(0u0n050r0/0;0?0^0-0t040518111b0r180-0z0D0C0W0Y0!0$0q0D0m0q0h1p0q0K0+050R0w0h0k1k0Z0#011o1q1s1q0K1y1A1w0K0c190K0q0W0{0E0t0e0n0$0F011C1m010H0T0k0n0e0G0k1w1V1X1$1E1)1A1,1.0+0a0x0g0c0u0t0u0E0D0~0n0x0P1T0c0c0k0L26111;0n190r1R2j1O1Q1P1x0z1?0$1s0n1+231w1h1j0X1D2t0D2v0n0u2z1w0t2c192h2j2N0.1W272B1%2G0c0=0h0+0M2g2R0,2Q1=2T1E2V2X0+0F2#1X2%2h2s012,0e2Y040I2:2i0-2?2*0$2_2{0s2~2=2R2@340+0p371c2L112z2m0z1Q2r32010L2H1/193i1a3g2P122$053p0P2M393n0i0+0P0H3e311l1E0b0+0x3J3D3L330H0+2K0u0L0q0S103x2;2(2S3S010*040y3Q2)3*0n0+0B3/3)2C3+0+0A0o37060x413P3K3`3F040D3I3$2i433R3`3=043@4a3C3:3`0u0+0d3^2@0G0D2.374c4k1%4m040l0l4u3(4q4s040N4p3n3,3~4i40424O4D3E0+2c0K0B0c3#2N4v3_2U3?4C444x0+0r0r4%4d1%4r4t4M4P4(1E460k0U0k4I3*4K3 4O4?4.4^4S0Q4V4X2$4Z4E0+2}4i4Q3*4y0f4}4e4$4i5a3n4y0v4-4w1E4:042!4M113A0k2j2K5A3h1i3j2m2p2k0e1z5D0r3i0-5N0Q0S0U04.
Exercice 19: syracuse(u)

Compléter le code de la fonction récursive syracuse qui prend en paramètre un entier non nul u et qui affiche tous les termes de la suite de Syracuse en partant de u.

>>> syracuse(5)
5
16
8
4
2
1

def syracuse(u):
print(u)
if u > 1:
syracuse(...)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=gn:h4/pob (d)uvis2mf3ytc1;050v0i0G0d0z0f0A0t0H0f0d0A0A0j010G0z0q010406050A0x0C0C0d0c0F040h0r0f0x0!0r0l050p0+0-0/0;0)0q0405140}170p140)0v0z0y0S0U0W0Y0n0z0k0n0f1l0n0G0%050N0s0f0i1g0V0X011k1m1o1m0G1u1w1s0G0c150G0n0S0@0A0q0d0l0Y0B011y1i010D0P0i0l0d0C0i1s1R1T1Y1A1#1w1(1*0%0a0t0e0c0r0q0r0A0z0`0l0t0L1P0c0c0i0H220}1-0l150p1N2f1K1M1L1t0v1/0Y1o0l1%1 1s1d1f0T1z2p0z2r0l0r2v1s0q28152d2f2J0*1S232x1Z2C0c0.0f0%0I2c2N0(2M1.2P1A2R2T0%0B2X1T2Z2d2o012(0d2U040E2,2e0)2/2$0Y2=2@0o2`2f2G0i2f2v2i0v1M2n2~010H2D1+1538162H2!2e33053f0L2I2N2:0g0%0L0D3o2}1h1A0b0%0t3z3t3d0l0D0%0A0F0c0d0H0x0A0i3G2#3B0Y0$040u3U2O3W2;0%0x3#2:3Y0w0m33060t3=3F3A2y2;0s0%2G2A0G3+3d3Y3!0~2Y3m2:0l3)403%3-3:3?3@3H3%3v040z3y442-4f3V3_48043*4m2e4o3$3_0r0%020k0G0J334w2:0C0z2V4a3_3Y3/4u0(4e4e463I3L3N3P3R3T4P4T4b0%432L3^2Q3|1|0H0n0O0|4!4*1A424L4+4s4_4@0%0w0w3:0}3q36183l0p3j2g3a0}2j5b0d1v54571e2Z570M0O0Q04.
Durée de vol

On appelle durée de vol de la suite de Syracuse la valeur du plus petit entier k tel que uk=1.

Par exemple, la durée de vol si u0=5 est de 5.

Exercice 20: duree_vol(u)

Compléter le code de la fonction récursive duree_vol qui prend en paramètre un entier non nul u et qui renvoie la durée de vol de la suite en partant de u.

>>> duree_vol(1)
0
>>> duree_vol(7)
16

def duree_vol(u):
...
# Tests
assert duree_vol(1) == 0
assert duree_vol(7) == 16
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h4/po+b (d)uvis2mf3ytc10050y0i0J0d0C0f0D0w0K0f0d0D0D0j010J0C0s010406050D0A0F0F0d0c0I040h0t0f0A0%0t0m050r0.0:0=0@0,0s040517101a0r170,0y0C0B0V0X0Z0#0p0C0l0p0f1o0p0J0*050Q0v0f0i1j0Y0!011n1p1r1p0J1x1z1v0J0c180J0p0V0`0D0s0d0m0#0E011B1l010G0S0i0m0d0F0i1v1U1W1#1D1(1z1+1-0*0a0w0e0c0t0s0t0D0C0}0m0w0O1S0c0c0i0K25101:0m180r1Q2i1N1P1O1w0y1=0#1r0m1*221v1g1i0W1C2s0C2u0m0t2y1v0s2b182g2i2M0-1V262A1$2F0c0;0f0*0L2f2Q0+2P1;2S1D2U2W0*0E2!1W2$2g2r012+0d2X040H2/2h0,2=2)0#2^2`0q2}2;2Q2?330*0o361b2K102y2l0y1P2q31010K2G1.183h193f2O112#053o0O2L383m0g0*0O0G3d301k1D0b0*0w3I3C3K320G3F0A2b0i0k0B0`3P2(3R010)040x3#2R3%0m0*0A3,2?3)0z0n36060w3|3O3J2B013E040C3H3w2:3~3Q403/043;462h483$400t0*0j0j364g3-400F0C2Y3=3m3)3_4e0+3}4A4o2?422b0J3V0 4y4C3m4r0*0M3`4A2%4p1$420i0T0i4u3%4w4P4B3|4R4D0*4F4H4n4(4L4s042Z4J4.3%4j040u4-3 2T3U3W3Y3!4y4@403)3+534}2*0*2J0t0K0p0R4I2O590#564Y4a3:5m1$3@0z3`103z0i2i2J5w3g1h3i2l2o2j0d1y5z0r3h0,5J0P0R0T04.
L'altitude maximale

L'altitude maximale de la suite de Syracuse est la valeur maximale de la suite.

Par exemple l'altitude maximale en partant de 5 est 16.

Exercice 21: altitude_max(u)

Compléter le code de la fonction récursive altitude_max qui prend en paramètre un entier non nul u et qui renvoie l'altitude maximale de la suite en partant de u.

>>> altitude_max(11)
52
>>> altitude_max(32)
32

def altitude_max(u):
...
# Tests
assert altitude_max(11) == 52
assert altitude_max(32) == 32
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
###(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)
rounded
>>> 
 
x
x
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

.128013wraPlkSe=_gn:5h4/pob (d)uvis2mf3y,tc1x050x0i0J0d0B0f0C0v0K0f0d0C0C0j010J0B0s010406050C0z0E0E0d0c0H040h0t0f0z0%0t0m050r0.0:0=0@0,0s040517101a0r170,0x0B0A0V0X0Z0#0p0B0l0p0f1o0p0J0*050Q0u0f0i1j0Y0!011n1p1r1p0J1x1z1v0J0c180J0p0V0`0C0s0d0m0#0D011B1l010F0S0i0m0d0E0i1v1U1W1#1D1(1z1+1-0*0a0v0e0c0t0s0t0C0B0}0m0v0O1S0c0c0i0K25101:0m180r1Q2i1N1P1O1w0x1=0#1r0m1*221v1g1i0W1C2s0B2u0m0t2y1v0s2b182g2i2M0-1V262A1$2F0c0;0f0*0L2f2Q0+2P1;2S1D2U2W0*0D2!1W2$2g2r012+0d2X040G2/2h0,2=2)0#2^2`0q2}2;2Q2?330*0o361b2K102y2l0x1P2q31010K2G1.183h193f2O112#053o0O2L383m0g0*0O0F3d301k1D0b0*0v3I3C3K320F0*2_0%0J0z0O0k0;0M3P2(3R010)040w3%2R3)0m0*0z3.2?3+0y0n36060v3~3O3J2B013E040B3H3w2:403Q423;043?482h4a3(420t0*0j0j364i3/420E0B2Y3@3m3+3{4g0+3 4C4q2?442b3X0c0 4A4E3m4t4v4A3}3 2%4r1$440i0T0i4w3)4y3|4D4S414V0*4H0z4J4p4T390u0*3#4!423+3-4A4;3m4d4f2O4*1D3+0I4:53323U0f3W3Y0i3!0d3$4}583*0*4|524b2T0*2J0t0K0p0R4K5n4j1$4{4_5p4e5B540*0y5H3|103z0i2i2J5M3g1h3i2l2o2j0d1y5P0r3h0,5Z0P0R0T04.