La racine carrée entière
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 5 — Algorithmes dichotomiques
Énoncé
Écrire une fonction racine_entiere(n) qui calcule (le plus grand entier tel que ) par dichotomie sur en temps sans utiliser de nombres flottants.
Corrigé
On cherche la valeur frontière dans l'intervalle d'entiers :
def racine_entiere(n: int) -> int:
"""Précondition : n >= 0."""
g, d = 0, n
while g < d:
# Invariant : g**2 <= n et (d+1)**2 > n
# Arrondi du milieu vers le haut pour éviter une boucle infinie quand d - g = 1
m = (g + d + 1) // 2
if m * m <= n:
g = m # La réponse est dans [m, d]
else:
d = m - 1 # La réponse est dans [g, m-1]
return g
Variant : La quantité décroît strictement à chaque étape grâce à l'arrondi supérieur du milieu.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.