Salut,
J’essaie de faire cet exercice :
J'ai fait ce code :
Code phyton : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 def trouverK1(n): k = 0 while 1: a = k*(k+1)/2 b = (k+1)*(k+2)/2 if a <= n and n < b: print("La valeur de k recherchée est :", k) print("On a bien : %d <= n(%d) < %d" % (a, n, b)) break k += 1 print("Fin")
Après je me suis dit qu'on pouvait éviter une division par 2 pour les bornes a et b et du coup je fais la comparaison avec 2n (pour diviser ou multiplier par 2 j'utilise un décalage binaire c'est plus rapide normalement et on travaille avec des entiers).
on peut probablement optimiser encore (en évitant de commencer à k=0 par exemple...) mais bon ...
Code phyton : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 def trouverK2(n): k = 0 n2 = n << 1 # n2 = 2 * n while 1: a = k*(k+1) b = (k+1)*(k+2) if a <= n2 < b: print("La valeur de k recherchée est :", k) print("On a bien : %d <= n(%d) < %d" % (a >> 1, n, b >> 1)) break k += 1 print("Fin")
Mais je n'ai pas compris la dernière question "Encadrer le nombre d’itération en fonction de n"...
Qu'en pensez-vous ?
Partager