Adloun

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, 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.