L' exponentiation rapide calcule en lisant l'écriture binaire de
Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 1 — Représenter les entiers · Opérateurs binaires et coût des algorithmes
Énoncé
L'exponentiation rapide calcule en lisant l'écriture binaire de . Écrire puissance_rapide(x, n), la valider pour de à et de à , et compter les multiplications pour puis .
Corrigé
L'idée. , où les sont les bits de . On maintient un facteur qui vaut successivement , , , … et on ne le multiplie au résultat que lorsque le bit courant vaut .
def puissance_rapide(x, n):
"""x**n par l'écriture binaire de n. Précondition : n >= 0."""
assert n >= 0
resultat = 1
facteur = x
while n > 0:
if n % 2 == 1:
resultat = resultat * facteur
facteur = facteur * facteur
n = n // 2
return resultat
for x in range(-4, 5):
for n in range(0, 20):
assert puissance_rapide(x, n) == x**n
cas passent.
L'invariant. À chaque tour, où est l'exposant initial. Au dernier tour , donc : c'est ce qui prouve la fonction.
Le coût. La boucle fait tours — soit nb_bits(n), la fonction du cours. Pour : tours. Pour : tours, là où la méthode naïve en ferait .
Contrôle : puissance_rapide(3, 13) rend , et .
Prolongement : ce passage de à est le gain de la dichotomie, que le chapitre 8 retrouvera sur la recherche dans un tableau trié.
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.