Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Licence CC BY-NC-ND Thierry Parmentelat & Arnaud Legout Inria - UCA

Exercice - niveau intermédiaire

On vous demande d’écrire une fonction qui met un objet x à la puissance entière n.

Le paramètre x doit pouvoir être multiplié par lui même, et le paramètre n est un entier >=1 (pas la peine de vérifier).

Naturellement on s’interdit d’utiliser l’opérateur prédéfini **; notamment notre algorithme doit pouvoir s’appliquer à tous les types d’objet qui supportent la multiplication.

Pour optimiser les calculs, on va utiliser un algorithme qui permet d’effectuer un nombre de multiplications en O(log2(n))O(log_2(n)).

Pour cela remarquez par exemple que le fait de mettre un nombre au carré nécessite seulement une multiplication ;

Ce qui signifie que la décomposition de n en binaire donne une formule pour xnx^n qui met en jeu de l’ordre de 2log2n2*log_2{n} multiplications.

Ainsi par exemple :

n=22(22+1)+1 n = 2 * 2 * (2*2 + 1) + 1

x21=(((x.x)2x)2)2.x x^{21} = (((x.x)^2*x)^2)^2 . x soit 6 multiplications

n=2(22(22+1)+1) n = 2 * (2 * 2 * (2*2 + 1) + 1)

x42=((((x.x)2x)2)2.x)2 x^{42} = ((((x.x)^2*x)^2)^2 . x)^2 soit 7 multiplications

from corrections.exo_power import exo_power
exo_power.example()
Loading...

Commentaires

Indice

# à vous de jouer
def power(x, n):
    "<votre code>"
# pour vérifier votre code
exo_power.correction(power)
Loading...