import time
def duree(n):
k, terme = 0, n while terme != 1:
if terme % 2 == 0:
terme = terme // 2 else:
terme = terme*3 + 1 k += 1
return k
print('duree(10**3) : ', duree(10**3))
def hauteur(n):
resultat, suite = n, n while suite != 1:
if suite % 2 == 0:
suite = suite // 2 else:
suite = 3*suite + 1 if suite > resultat:
resultat = suite return resultat
print('hauteur(10**4) : ', hauteur(10**4))
def hauteur_max(n):
resultat = 1
for k in range(2, n):
h = hauteur(k) if h > resultat:
resultat = h return resultat
def hauteur_max_eff_1(n):
resultat = 1
for depart in range(2, n):
u = depart
while u >= depart:
if u > resultat:
resultat = u if u % 2 == 0:
u = u // 2 else:
u = 3*u + 1
1
return resultat
# vus[k] signifie que k a déjà été vu def hauteur_max_eff_2(n, taille_vus):
vus = taille_vus*[False]
vus[1] = True resultat = 1
for depart in range(2, n):
u = depart
while u >= taille_vus or vus[u] == False:
if u > resultat:
resultat = u if u < taille_vus:
vus[u] = True if u % 2 == 0:
u = u // 2 else:
u = 3*u + 1 return resultat
# tests
n1 = 5*10**3 print('\n')
print('n1 : ', n1)
print('\n')
t1 = time.time()
print('hauteur_max : ', hauteur_max(n1)) t2 = time.time()
print('durée : ', t2 - t1)
print('\n')
t1 = time.time()
print('hauteur_max_eff_1 : ', hauteur_max_eff_1(n1)) t2 = time.time()
print('durée : ', t2 - t1)
print('\n')
t1 = time.time()
print('hauteur_max_eff_2 : ', hauteur_max_eff_2(n1, n1)) t2 = time.time()
print('durée : ', t2 - t1)
2