0% ont trouvé ce document utile (0 vote)
97 vues3 pages

Suite de Syracuse en Python : Calculs et Vols

Ce document décrit une suite de Syracuse et propose des fonctions Python pour calculer les termes de la suite, déterminer la longueur d'un vol de Syracuse et trouver les plus longs vols pour des valeurs initiales entre 3 et 100 000.

Transféré par

agoschantelas09
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
97 vues3 pages

Suite de Syracuse en Python : Calculs et Vols

Ce document décrit une suite de Syracuse et propose des fonctions Python pour calculer les termes de la suite, déterminer la longueur d'un vol de Syracuse et trouver les plus longs vols pour des valeurs initiales entre 3 et 100 000.

Transféré par

agoschantelas09
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Exercice Python

Approche de résolution proposé par Souvenir MEGNIGBETO. Vos commentaires et idées


d'améliorations sont les bienvenus sur le discord: [Link] Vous
pourrez toujours proposer une version R du code!

Suite de Syracuse

On considère la suite de syracuse définie par U0 = v et

Un+1 = Un /2 si Un est pair

Un+1 = 3Un + 1 sinon

On a vérifié numériquement jusqu'à v = 2


62
, que quelque soit la valeur initiale v, la suite
fini par prendre les valeurs 1, 4, 2, 1, 4, 2, ...

Ecrire une fonction qui calcul un terme de la suite en fonction du terme précédent.
Ecrire une fonction qui calcul et affiche en fonction de n et de la valeur initiale vles n
premiers termes de la suite U0 , U1 , . . . , Un−1
Définir une fonction qui détermine en fonction de la valeur initiale v, la longueur du
"vol de syracuse", c'est à dire le premier indice n pour lequel Un = 1 .
Enfin, écrire un programme qui trouve toutes les longueurs des plus longs vols pour
les valeurs initiales v de 3 à 100000. Le programme doit afficher tous les couples
(v, d) où d est la longueur du vol de Syracuse pour la valeur initiale v si d est
strictement supérieur à la longueur de tous les vols précédents.

1. Fonction de calcul d'un terme de la suite en fonction du terme précédent

In [ ]: def syracuseTerme(preced):
if(preced%2 == 0):
actuel = int(preced/2)
else:
actuel = 3*preced + 1
return actuel

In [ ]: syracuseTerme(52)

Out[ ]: 26

2. Calcul des n premiers termes de la suite en fonction de la valeur initial et de v

In [ ]: def nTermesSyracuse(v,n):
u = []
[Link](v)
for i in range(1,n):
[Link](syracuseTerme(u[i-1]))
return u
In [ ]: nTermesSyracuse(17,18)

Out[ ]: [17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2]

3. Fonction pour déterminer le vol de syracuse

In [ ]: def vol(v):
i=0
u = v
while u!=1:
i = i+1
u = syracuseTerme(u)
return(i)

In [ ]: vol(17)

Out[ ]: 12

4. Affichage des plus long vols avec v entre 3 et 100000

In [ ]: d = vol(3)
print((3,d))
for v in range(3,100000):
if vol(v) > d:
d=vol(v)
print((v,d))
(3, 7)
(6, 8)
(7, 16)
(9, 19)
(18, 20)
(25, 23)
(27, 111)
(54, 112)
(73, 115)
(97, 118)
(129, 121)
(171, 124)
(231, 127)
(313, 130)
(327, 143)
(649, 144)
(703, 170)
(871, 178)
(1161, 181)
(2223, 182)
(2463, 208)
(2919, 216)
(3711, 237)
(6171, 261)
(10971, 267)
(13255, 275)
(17647, 278)
(23529, 281)
(26623, 307)
(34239, 310)
(35655, 323)
(52527, 339)
(77031, 350)

Vous aimerez peut-être aussi