Comment calculer les puissances d un nombre? Christophe.Troestler@umh.ac.be http://www.umh.ac.be/math/an/



Documents pareils
Feuille TD n 1 Exercices d algorithmique éléments de correction

Représentation des Nombres

Cours 1 : Qu est-ce que la programmation?

Programmation linéaire

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

Chapitre 1 : Évolution COURS

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Les arbres binaires de recherche

Algorithme. Table des matières

TP 2 Réseaux. Adresses IP, routage et sous-réseaux

1 Recherche en table par balayage

Raisonnement par récurrence Suites numériques

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Moments des variables aléatoires réelles

Optimisation Discrète

Logiciel de Base. I. Représentation des nombres

Baccalauréat ES Polynésie (spécialité) 10 septembre 2014 Corrigé

Thématiques Questions possibles berufsfeld/fach

Licence Sciences et Technologies Examen janvier 2010

Fonctions linéaires et affines. 1 Fonctions linéaires. 1.1 Vocabulaire. 1.2 Représentation graphique. 3eme

Algorithmes récursifs

TD : Codage des images

Développements limités, équivalents et calculs de limites

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

La fonction exponentielle

Recherche dans un tableau

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Examen Médian - 1 heure 30

Taux d évolution moyen.

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Algorithmique et Programmation Fonctionnelle

Représentation d un entier en base b

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Transmission d informations sur le réseau électrique

Quelques algorithmes simples dont l analyse n est pas si simple

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Limites finies en un point

Structures algébriques

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

Programmation C++ (débutant)/instructions for, while et do...while

INTRODUCTION A L ELECTRONIQUE NUMERIQUE ECHANTILLONNAGE ET QUANTIFICATION I. ARCHITECTURE DE L ELECRONIQUE NUMERIQUE

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Objectifs du cours d aujourd hui. Informatique II : Cours d introduction à l informatique et à la programmation objet. Complexité d un problème (2)

Cours 1 : La compilation

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

avec des nombres entiers

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Exercices Alternatifs. Une fonction continue mais dérivable nulle part

Introduction à la théorie des graphes. Solutions des exercices

Exo7. Limites de fonctions. 1 Théorie. 2 Calculs

Calculs de probabilités

Probabilités sur un univers fini

Rappels sur les suites - Algorithme

Image d un intervalle par une fonction continue

Vers l'ordinateur quantique

Exercices - Polynômes : corrigé. Opérations sur les polynômes

Introduction à MATLAB R

Intégration et probabilités TD1 Espaces mesurés Corrigé

Compter à Babylone. L écriture des nombres

Programmation linéaire

Problèmes de dénombrement.

Optimisation des fonctions de plusieurs variables

Université Paris-Dauphine DUMI2E 1ère année, Applications

Quelques tests de primalité

CORRECTION EXERCICES ALGORITHME 1

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

Les assurances sociales en Suisse

Calculs de probabilités conditionelles

Définitions. Numéro à préciser. (Durée : )

Proposition. Si G est un groupe simple d ordre 60 alors G est isomorphe à A 5.

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

V- Manipulations de nombres en binaire

Les deux points les plus proches

L Equilibre Macroéconomique en Economie Ouverte

Bases de données documentaires et distribuées Cours NFE04

Chapitre 2. Eléments pour comprendre un énoncé

Sommaire. Images Actives Logiciel libre développé par le CRDP de l académie de Versailles 2 Rue Pierre Bourdan Marly le Roi

Conversion d un entier. Méthode par soustraction

Simulation de variables aléatoires

Théorie et Codage de l Information (IF01) exercices Paul Honeine Université de technologie de Troyes France

Logiciel Libre Cours 3 Fondements: Génie Logiciel

PRODUCTION DE L ENERGIE ELECTRIQUE

Leçon 01 Exercices d'entraînement

4. Les structures de données statiques

La mémoire. Un ordinateur. L'octet. Le bit

Algorithmique I. Algorithmique I p.1/??

Cryptologie et physique quantique : Espoirs et menaces. Objectifs 2. distribué sous licence creative common détails sur

Objets Combinatoires élementaires

Développements limités. Notion de développement limité

PEUT-ON «VOIR» DANS L ESPACE À N DIMENSIONS?

Algorithmique et Programmation, IMA

IFT2880 Organisation des ordinateurs et systèmes

Plan du cours Cours théoriques. 29 septembre 2014

NOTIONS DE PROBABILITÉS

Transcription:

Comment calculer les puissances d un nombre? Christophe.Troestler@umh.ac.be http://www.umh.ac.be/math/an/

1. Première idée x 0 = 1 x 1 = x x 2 = x x x 3 = x 2 x = x x x x 4 = x 3 x = x x x x Donc, pour calculer, disons, x 5, on va «accumuler» des produits de x en nombre suffisant : x x x x x. x n = x n 1 x = x x x x } {{ } n fois

1. Première idée x 0 = 1 x 1 = x x 2 = x x x 3 = x 2 x = x x x x 4 = x 3 x = x x x x Donc, pour calculer, disons, x 5, on va «accumuler» des produits de x en nombre suffisant : }{{} x x x x x R. x n = x n 1 x = x x x x } {{ } n fois

1. Première idée x 0 = 1 x 1 = x x 2 = x x x 3 = x 2 x = x x x x 4 = x 3 x = x x x x Donc, pour calculer, disons, x 5, on va «accumuler» des produits de x en nombre suffisant : }{{} x x x x x R. x n = x n 1 x = x x x x } {{ } n fois

1. Première idée x 0 = 1 x 1 = x x 2 = x x x 3 = x 2 x = x x x x 4 = x 3 x = x x x x Donc, pour calculer, disons, x 5, on va «accumuler» des produits de x en nombre suffisant : x } {{ x x} x x R. x n = x n 1 x = x x x x } {{ } n fois

1. Première idée x 0 = 1 x 1 = x x 2 = x x x 3 = x 2 x = x x x x 4 = x 3 x = x x x x Donc, pour calculer, disons, x 5, on va «accumuler» des produits de x en nombre suffisant : x } x {{ x x} x R. x n = x n 1 x = x x x x } {{ } n fois

1. Première idée x 0 = 1 x 1 = x x 2 = x x x 3 = x 2 x = x x x x 4 = x 3 x = x x x x Donc, pour calculer, disons, x 5, on va «accumuler» des produits de x en nombre suffisant : x x x x x } {{ } R. x n = x n 1 x = x x x x } {{ } n fois

1. Première idée x 0 = 1 x 1 = x x 2 = x x x 3 = x 2 x = x x x x 4 = x 3 x = x x x x. x n = x n 1 x = x x x x } {{ } n fois Donc, pour calculer, disons, x 5, on va «accumuler» des produits de x en nombre suffisant : x x x x x } {{ } R Écrivez un programme qui utilise cette idée pour calculer (x, n) x n. Prouvez que votre programme est correct.

Le programme a comme données x R et n N : R 1 R = 1 = x 0 Pour i = 1,..., n faire puiss 1 (x, n) : R R x R = x i R = x n Remarquez que ce programme marche si n = 0.

2. Deuxième idée Plutôt que de multiplier x trois fois pour avoir x 4, on peut aller plus vite en remarquant que x 4 = (x 2 ) 2 ce qui donne deux multiplications (une pour x 2 = x x, une pour (x 2 ) 2 = x 2 x 2 ). Essayons d exploiter cette idée de manière générale : x 9 = x 8 x x 2 = x x x 10 = x 8 x 2 x 3 = x 2 x x 11 = x 8 x 2 x x 4 = (x 2 ) 2 x 12 = x 8 x 4 x 5 = x 4 x x 13 = x 8 x 4 x x 6 = x 4 x 2 x 14 = x 8 x 4 x 2 x 7 = x 4 x 2 x x 15 = x 8 x 4 x 2 x x 8 = (x 4 ) 2 x 16 = (x 8 ) 2 Quelle est la relation : exposant décomposition?

n ((x 2 ) 2 ) 2 (x 2 ) 2 x 2 x 1 2 3 2 2 2 1 3 1 1 2 + 1 4 1 2 2 5 1 1 2 2 6 1 1 2 2 + 2 7 1 1 1 2 2 + 2 + 1 8 1 2 3 9 1 1 2 3 + 1

n ((x 2 ) 2 ) 2 (x 2 ) 2 x 2 x 1 2 3 2 2 2 1 3 1 1 2 + 1 4 1 0 0 2 2 + 0 + 0 5 1 0 1 2 2 + 0 + 0 6 1 1 0 2 2 + 2 + 0 7 1 1 1 2 2 + 2 + 1 8 1 0 0 0 2 3 + 0 + 0 + 0 9 1 0 0 1 2 3 + 0 + 0 + 1 Cette table résulte du fait général : x n = x a 32 3 +a 2 2 2 +a 1 2+a 0 = ( (x 4 ) 2) a3 ((x 2 ) 2) a2 (x 2 ) a1 x a 0 Voyez-vous pourquoi? Comment trouver les a i à partir de n?

2.1. Écriture binaire des nombres Réponse à la question précédente : n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0 où a i {0, 1} pour tout i = 0, 1,..., p. Le terme x 2i apparaît dans x n si et seulement si a i = 1. Une telle décomposition existe-t-elle toujours? Est-elle unique? Regardons a 0. Essayez pour n = 4, n = 5, n = 6 et n = 7...

2.1. Écriture binaire des nombres Réponse à la question précédente : n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0 où a i {0, 1} pour tout i = 0, 1,..., p. Le terme x 2i apparaît dans x n si et seulement si a i = 1. Une telle décomposition existe-t-elle toujours? Est-elle unique? Regardons a 0. Puisque n = (a p 2 p 1 + + a 2 2 + a 1 )2 + a 0, on a : a 0 = 0 si n est pair et a 0 = 1 si n est impair. Autrement dit : Qu en est-il pour a 1? a 0 = n mod 2.

2.1. Écriture binaire des nombres Réponse à la question précédente : n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0 où a i {0, 1} pour tout i = 0, 1,..., p. Le terme x 2i apparaît dans x n si et seulement si a i = 1. Une telle décomposition existe-t-elle toujours? Est-elle unique? Regardons a 0. Puisque n = (a p 2 p 1 + + a 2 2 + a 1 )2 + a 0, on a : a 0 = 0 si n est pair et a 0 = 1 si n est impair. Autrement dit : a 0 = n mod 2. Comme a p 2 p 1 + + a 2 2 + a 1 = n div 2, on a a 1 = (n div 2) mod 2.

EXEMPLE : 11 = n = + a 3 2 3 + a 2 2 2 + a 1 2 + a 0 pour quels a i?. a 0 = n mod 2 = 11 mod 2 = 1 a 0 = 1 n 0 := + a 3 2 2 + a 2 2 2 + a 1 = n div 2 = 11 div 2 = 5

EXEMPLE : 11 = n = + a 3 2 3 + a 2 2 2 + a 1 2 + a 0 pour quels a i?. a 0 = n mod 2 = 11 mod 2 = 1 a 0 = 1 n 0 := + a 3 2 2 + a 2 2 2 + a 1 = n div 2 = 11 div 2 = 5 a 1 = n 0 mod 2 = 5 mod 2 = 1 a 1 = 1 n 1 := + a 3 2 + a 2 2 = n 0 div 2 = 5 div 2 = 2

EXEMPLE : 11 = n = + a 3 2 3 + a 2 2 2 + a 1 2 + a 0 pour quels a i?. a 0 = n mod 2 = 11 mod 2 = 1 a 0 = 1 n 0 := + a 3 2 2 + a 2 2 2 + a 1 = n div 2 = 11 div 2 = 5 a 1 = n 0 mod 2 = 5 mod 2 = 1 a 1 = 1 n 1 := + a 3 2 + a 2 2 = n 0 div 2 = 5 div 2 = 2 a 2 = n 1 mod 2 = 2 mod 2 = 0 a 2 = 0 n 2 := + a 3 2 + a 2 = n 1 div 2 = 2 div 2 = 1

EXEMPLE : 11 = n = + a 3 2 3 + a 2 2 2 + a 1 2 + a 0 pour quels a i?. a 0 = n mod 2 = 11 mod 2 = 1 a 0 = 1 n 0 := + a 3 2 2 + a 2 2 2 + a 1 = n div 2 = 11 div 2 = 5 a 1 = n 0 mod 2 = 5 mod 2 = 1 a 1 = 1 n 1 := + a 3 2 + a 2 2 = n 0 div 2 = 5 div 2 = 2 a 2 = n 1 mod 2 = 2 mod 2 = 0 a 2 = 0 n 2 := + a 3 2 + a 2 = n 1 div 2 = 2 div 2 = 1 a 3 = n 2 mod 2 = 1 mod 2 = 1 a 3 = 1 n 3 := + a 3 = n 2 div 2 = 2 div 2 = 0 En conclusion 11 = 1 2 3 + 0 2 4 + 1 2 1 + 1 2 0. On appelle 1011 l écriture binaire de 11.

EXEMPLE : 11 = n = + a 3 2 3 + a 2 2 2 + a 1 2 + a 0 pour quels a i?. a 0 = n mod 2 = 11 mod 2 = 1 a 0 = 1 n 0 := + a 3 2 2 + a 2 2 2 + a 1 = n div 2 = 11 div 2 = 5 a 1 = n 0 mod 2 = 5 mod 2 = 1 a 1 = 1 n 1 := + a 3 2 + a 2 2 = n 0 div 2 = 5 div 2 = 2 a 2 = n 1 mod 2 = 2 mod 2 = 0 a 2 = 0 n 2 := + a 3 2 + a 2 = n 1 div 2 = 2 div 2 = 1 a 3 = n 2 mod 2 = 1 mod 2 = 1 a 3 = 1 n 3 := + a 3 = n 2 div 2 = 2 div 2 = 0 En conclusion 11 = 1 2 3 + 0 2 4 + 1 2 1 + 1 2 0. On appelle 1011 l écriture binaire de 11. Pouvez-vous généraliser ce procédé en écrivant un algorithme de calcul des a i?

Soit n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0. Mathématique Algorithmique N n N = a 0 = a 1 = a 2 =. 1 n

Soit n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0. Mathématique Algorithmique N n a 0 = n mod 2 a 0 N mod 2 1 2 N = n a 0 = n mod 2 a 1 = a 2 =.

Soit n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0. Mathématique Algorithmique N n a 0 = n mod 2 a 0 N mod 2 n 0 = n div 2 N N div 2 1 2 3 N = n n 0 a 0 = n mod 2 a 1 = a 2 =.

Soit n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0. Mathématique Algorithmique N n a 0 = n mod 2 a 0 N mod 2 n 0 = n div 2 N N div 2 a 1 = n 0 mod 2 a 1 N mod 2 1 2 3 4 N = n n 0 a 0 = n mod 2 a 1 = n 0 mod 2 a 2 =.

Soit n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0. Mathématique Algorithmique N n a 0 = n mod 2 a 0 N mod 2 n 0 = n div 2 N N div 2 a 1 = n 0 mod 2 a 1 N mod 2 n 1 = n 0 div 2 N N div 2 1 2 3 4 5 N = n n 0 n 1 a 0 = n mod 2 a 1 = n 0 mod 2 a 2 =.

Soit n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0. Mathématique Algorithmique N n a 0 = n mod 2 a 0 N mod 2 n 0 = n div 2 N N div 2 a 1 = n 0 mod 2 a 1 N mod 2 n 1 = n 0 div 2 N N div 2 a 2 = n 1 mod 2 a 2 N mod 2 1 2 3 4 5 6 N = n n 0 n 1 a 0 = n mod 2 a 1 = n 0 mod 2 a 2 = n 1 mod 2.

Soit n = a p 2 p + a p 1 2 p 1 + + a 2 2 2 + a 2 2 + a 0. Mathématique Algorithmique N n a 0 = n mod 2 a 0 N mod 2 n 0 = n div 2 N N div 2 a 1 = n 0 mod 2 a 1 N mod 2 n 1 = n 0 div 2 N N div 2 a 2 = n 1 mod 2 a 2 N mod 2 n 2 = n 1 div 2. N N div 2. 1 2 3 4 5 6 7 N = n n 0 n 1 n 2 a 0 = n mod 2 a 1 = n 0 mod 2 a 2 = n 1 mod 2.

Réécrivez le tableau précédent à l aide d une boucle. Quel est le test qui décide de l arrêt de la boucle?

Réécrivez le tableau précédent à l aide d une boucle. Quel est le test qui décide de l arrêt de la boucle? Un programme de calcul des digits binaires a i d un entier n N est : digits(n) : N n; i 0 Tant que N > 0 faire { ai N mod 2 N N div 2 i i + 1 si i = 0, c est que n = 0 ; sinon, n = 0 j<i a j2 j

Réécrivez le tableau précédent à l aide d une boucle. Quel est le test qui décide de l arrêt de la boucle? Un programme de calcul des digits binaires a i d un entier n N est : digits(n) : N n; i 0 Tant que N > 0 faire { ai N mod 2 N N div 2 i i + 1 si i = 0, c est que n = 0 ; sinon, n = 0 j<i a j2 j REMARQUE : L algorithme ci-dessus montre que les a i existent toujours. La manière dont on a déduit l algorithme montre que les a i sont uniques. On appelle a p a p 1... a 2 a 1 a 0 l écriture binaire de n.

2.2. Revenons au calcul de x n... Repartons de : x n = x a 32 3 +a 2 2 2 +a 1 2+a 0 = ( (x 4 ) 2) a3 ((x 2 ) 2) a2 (x 2 ) a1 x a 0 Il y a deux ingrédients : les puissances de x : x, x 2, x 4 = (x 2 ) 2, x 8 = (x 4 ) 2,... ; le terme x 2i est présent dans le produit de x n ssi a i = 1. Comment construire x n à partir des remarques ci-dessus en «accumulant» le nécessaire dans une variable R initialisée à 1?

2.2. Revenons au calcul de x n... Repartons de : x n = x a 32 3 +a 2 2 2 +a 1 2+a 0 = ( (x 4 ) 2) a3 ((x 2 ) 2) a2 (x 2 ) a1 x a 0 Il y a deux ingrédients : les puissances de x : x, x 2, x 4 = (x 2 ) 2, x 8 = (x 4 ) 2,... ; le terme x 2i est présent dans le produit de x n ssi a i = 1. On peut voir le calcul de x n comme suit : R 1 Si a 0 = 1 alors R R x R = x a 0 Si a 1 = 1 alors R R x 2 R = (x 2 ) a 1 xa 0 = xa 12+a 0 Si a 2 = 1 alors R R x 4. R = (x 4 ) a 2 (x2 ) a 1 xa 0 = xa 22 2 +a 1 2+a 0. Comment calculer x 2, x 4,...?

R 1 Algorithme Contenu des variables X = 1 R = 1

R 1 X x Algorithme X = x Contenu des variables 1 2 X = x R = 1

Algorithme Contenu des variables R 1 X x X = x Si a 0 = 1 alors R R X R = x a 0 X = 1 2 3 x R = 1 x a 0

Algorithme R 1 X x X = x Si a 0 = 1 alors R R X R = x a 0 X X X X = x 2 Contenu des variables 1 2 3 4 X = x x 2 R = 1 x a 0

Algorithme Contenu des variables R 1 X x X = x Si a 0 = 1 alors R R X R = x a 0 X X X X = x 2 Si a 1 = 1 alors R R X R = (x 2 ) a 1 xa 0 = xa 12+a 0 1 2 3 4 5 X = x x 2 R = 1 x a 0 x a 12+a 0

Algorithme Contenu des variables R 1 X x X = x Si a 0 = 1 alors R R X R = x a 0 X X X X = x 2 Si a 1 = 1 alors R R X R = (x 2 ) a 1 xa 0 = xa 12+a 0 X X X X = x 4 1 2 3 4 5 6 X = x x 2 x 4 R = 1 x a 0 x a 12+a 0

Algorithme Contenu des variables R 1 X x X = x Si a 0 = 1 alors R R X R = x a 0 X X X X = x 2 Si a 1 = 1 alors R R X R = (x 2 ) a 1 xa 0 = xa 12+a 0 X X X X = x 4 Si a 2 = 1 alors R R X. R = (x 4 ) a 2 (x2 ) a 1 xa 0 = xa 22 2 +a 1 2+a 0. 1 2 3 4 5 6 7 X = x x 2 x 4... R = 1 x a 0 x a 12+a 0 x a 22 2 +a 1 2+a 0 Écrivez cet algorithme à l aide d une boucle.

En conclusion, en supposant qu on ai calculé l expansion binaire a p... a 1 a 0 de n, on trouve le programme : puiss 3 (x, n) : Comment éviter de calculer préalablement a p... a 1 a 0 de n? R 1; X x Pour { tout i = 0,..., p faire Si ai = 1 alors R R X X X X On pense que R = x n l expansion binaire

En conclusion, en supposant qu on ai calculé l expansion binaire a p... a 1 a 0 de n, on trouve le programme : puiss 3 (x, n) : R 1; X x Pour { tout i = 0,..., p faire Si ai = 1 alors R R X X X X On pense que R = x n Comment éviter de calculer préalablement l expansion binaire a p... a 1 a 0 de n? Notons qu à une étape donnée, on n a besoin que d un a i... Comparons le programme de calcul de de x n et celui de calcul des a i.

Calcul de x n Calcul des a i R 1; X x N n; i 0 Pour tout i = 0,..., p faire Tant que N > 0 faire { a Si ai = 1 alors R R X i N mod 2 N N div 2 X X X i i + 1 De ceci, quelles remarques peut-on faire, en particulier au sujet des a i, et en particulier de l indice i? du critère de terminaison de la boucle?

Calcul de x n Calcul des a i R 1; X x N n; i 0 Pour tout i = 0,..., p faire Tant que N > 0 faire { a Si ai = 1 alors R R X i N mod 2 N N div 2 X X X i i + 1 De ceci, on peut conclure que : Le a i du programme de droite est celui nécessaire dans le programme de gauche. Il faut donc «synchroniser» les deux boucles ; On n a besoin que d un a i à la fois (donc on peut utiliser une variable non indicée, disons A) et on n a pas besoin de l indice i ; Si les boucles sont synchronisées, i variera de 0 à p tant que N > 0, p étant atteint lorsque N = 0. Comme on n a pas besoin de i, le critère qui nous intéresse est «N > 0». Écrivez un algorithme qui «fond» ces deux programmes en un seul. Simplifiez le autant que possible.

Le programme correspondant est : puiss 4 (x, n) : R 1; X x; N n Tant { que N > 0 faire Si N impair, R R X N N div 2 X X X A-t-on bien R = x n? Les questions suivantes sont cruciales : Cet algorithme se termine-t-il pour n importe quelles données x R et n N? Ce programme est-il correct? puiss 4 est-il vraiment plus rapide que le procédé «naïf»? Si oui, dans quelle mesure peut-on le quantifier?

2.3. Terminaison puiss 4 (x, n) : R 1; X x; N n Tant que N > 0 faire { Si N impair, R R X N N div 2 X X X Le résultat est dans R À chaque tour de boucle, la valeur de N est divisée par 2. Les valeurs de N forment donc une suite strictement décroissante de naturels. Forcément, il arrivera un moment où N = 0 et la boucle s arrêtera.

2.4. Invariant de boucle puiss 4 (x, n) : R 1; X x; N n x n = X N R Tant que N > 0 faire Si N impair, R R X N N div 2 X X X x n = X N R N = 0 (fin de boucle), donc R = x n

2.5. Complexité En comparant puiss 4 avec puiss 3, on voit que, si n = (a p... a 1 a 0 ) 2, on a R 1; X x; N n; i 0 Tant que N > 0 i = 0,..., p faire Si N impair a i = 1, R R X puiss 4 (x, n) : N N div 2 X X X i i + 1 Le résultat est dans R Que peut-on en déduire sur le nombre d opérations effectuées par puiss 4?

2.5. Complexité En comparant puiss 4 avec puiss 3, on voit que, si n = (a p... a 1 a 0 ) 2, on a R 1; X x; N n; i 0 Tant que N > 0 i = 0,..., p faire Si N impair a i = 1, R R X puiss 4 (x, n) : N N div 2 X X X i i + 1 Le résultat est dans R On fait p + 1 tours de boucle et, à chaque tour, toujours 2 opérations, plus une troisième si a i = 1. Le nombre total d opérations est donc p p 3 + (p + 1)2 + a i = 5 + 2p + a i 6 + 3p i=0 2 p n < 2 p+1 p log 2 n < p + 1 p = log 2 n i=0

En rouge, n n En vert, n 6 + 3 log 2 n. puiss 1 puiss 4 n n 6 + 3 log 2 n 2 2 9 3 3 9 4 4 12 10 10 15 15 15 15 16 16 18 17 17 18 18 18 18 19 19 18 20 20 18 100 100 24 1000 1000 33 2 k 2 k k