\reload{<img src="gifs/doc/etoile.gif" alt="rechargez" width="20" height="20">}\def{integer N=randint(100..10000)}
\form{.}{expform}{Choisissez un entier  N infrieur  100000 : <input size=6 name=parm1 value="\parm1">
<input type=hidden value=OK> } 
\def{integer value=\parm1}
\def{integer  N=\value issametext NaN ? \N:min(\value,100000)}
\def{integer n=floor(ln(\N)/ln(2))+1}
\def{integer n1=\n-1}
\def{text listeN=<th> N</th><td>\N</td>}
\def{integer r=\N%2}
\def{text lister=<th> <font color=blue>r</font></th><td><font color=blue>\r</font></td>}
\def{text listea=<th> S</th><td>\(a)</td>}
\def{text listeA=<th>A</th><td>1</td><td>\(a^\r)</td>}
\def{text A=\r}
\def{integer mult=0}
\def{integer  j=1}
\def{integer N1=floor(\N/2)}
\def{text Nbin=pari(binary(\N))}
\def{text Nbin =wims(items2words \Nbin)}
\def{text Nbin =wims(nospace \Nbin)}
\for{i=1 to \n-1}{
\def{integer r = \N1 %2}
\def{integer mult=\mult+\r}
\def{text lister=\lister <td><font color=blue>\r</font></td>}
\def{integer j=\j*2}
\def{text listea=\listea <td>\(a^\j)</td>}
\def{integer A=\A+2^\i*\r}
\def{text listeA= \listeA <td>\(a^\A)</td>}
\def{text listeN=\listeN <td>\N1</td>}
\def{integer N1=floor(\N1/2)}
}

\def{text listeN=\listeN <td>0</td>}
L'algorithme binaire de calcul des puissances \(N)-imes peut se faire 
de droite  gauche ou de gauche  droite. Prenons  \(N = \N). L'criture en binaire 
de \N est \Nbin. Dans les deux cas, le nombre de multiplications est 
gal  \mult et le nombre d'lvations au carr est gal  \n
\fold{nombremult}
<ul><li>
<span class="defn"> Algorithme binaire de droite  gauche </span>

<table align="center" border=1>
<tr align="center" bgcolor="skyblue">\listeA</tr>
<tr align="center"> \listeN </tr>
<tr align="center" bgcolor="skyblue">\listea <td></td></tr>
<tr align="center">\lister<td></td> </tr>
</table>

Les oprations  faire sont des lvations au carr 
(carrs successifs de \(a) calculs dans la ligne \(S)) 
et la multiplication d'un lment de \(A) par un nombre dans la ligne des \(S) 
lorsque l'entier \(r) correspondant est gal  1. 
La dcomposition en binaire de \N se lit sur la ligne \(r) de droite  gauche.
</li>
<li><span class="defn">Algorithme binaire de gauche  droite :</span>
\def{text listei=<th> i</th><td>\n1</td>}
\def{integer r=floor(\N/2^(\n-1))}
\def{text lister=<th> <font color=blue>r</font></th><td><font color=blue>\r</font></td>}
\def{text listea=<th> S</th><td>1</td>}
\def{text listeA=<th>A</th><td>\(a)</td>}
\def{text A=\r}
\def{integer N1=\N%2^(\n-1)}
\for{i=1 to \n-1}{
\def{integer r =floor(\N1/2^(\n-\i-1))}
\def{integer h=\n-\i-1}
\def{text listei=\listei <td>\h</td>}
\def{text lister=\lister <td><font color=blue>\r</font></td>}
\def{integer j=2^(\n-\i-1)}
\def{integer k=2*\A}
\def{text listea=\listea <td>\(a^\k)</td>}
\def{integer A=\r+\k}
\def{text listeA= \listeA <td>\(a^\A)</td>}
\def{text listeN=\listeN <td>\N1</td>}
\def{integer N1=\N1 %\j}
}
\def{text listeN=\listeN <td>0</td>}

 <table align="center" border=1>
<tr align="center"> \listei </tr>
<tr align="center" bgcolor="skyblue"> \listea </tr>
<tr align="center" bgcolor="skyblue"> \listeA </tr>
<tr align="center"> \lister </tr>
</table>

Les oprations  faire sont des lvations au carr  d'un lment de \(A ) sur la ligne 
\(S) et la multiplication par le  nombre fixe \(a) 
lorsque l'entier \(r) est gal  1 qui permet de passer de la ligne \(S)  la ligne \(A). 
La dcomposition en binaire de \N se lit sur la ligne \(r) de gauche  droite.</li></ul>

<div class="exercice"><ul><li>\exercise{module=U3/algo/oefalgoarithm.fr&cmd=new&exo=nombremult}{Nombre de multiplications}
</li><li>
\exercise{module=U3/algo/oefalgoarithm.fr&cmd=new&exo=exponent}{Exercice sur l'exponentiation}
</li></ul>
</div>