n=1 # Nombre sur lequel porte le calcul exponentiel dichotomique x=1 while v<>1: if v%2==0: v=v/2 n=n+n else: x=x+n n=n+n v=(v-1)/2 print "(",x,",",n-1,",",v,")" print "\na^",x," * a^",n-1," = a^",(x+n)-1,"\n"
Function Puissance(ByVal Nb1 As Double, ByVal Expo As Long) As Double ' EXPONENTIATION RAPIDE ' Appliqué au calcul d'une puissance entière d'un nb ' Paramètres Dim Signe As Integer ' Traitement pb de signe Signe = Sgn(Expo) Expo = Abs(Expo) ' Cas triviaux If Expo = 0 Then Puissance = 1: Exit Function If Expo = 1 Then Puissance = Nb1: Exit Function ' Algo Puissance = 1 Do If Expo And 1 Then Puissance = Puissance * Nb1 Expo = Expo \ 2 Nb1 = Nb1 * Nb1 Loop While Expo > 1 Puissance = Puissance * Nb1 ' Renvoi 1/puissance si exposant négatif If Signe < 0 Then Puissance = 1 / Puissance End Function
let estpair a = if a land 1 =1 then false else true;; (*version naive*) let rec exp a b = if b=0 then 1 else if estpair b then exp (a*a) (b lsr 1) else a * (exp a (b-1) );; (* ou en tail rec *) let exp a b = let rec f acc a b = if b=0 then acc else if estpair b then f acc (a*a) (b lsr 1) else f (acc * a) a (b-1) in f 1 a b;;
function puissance(x,n:longint):longint; var intermediaire:longint; begin if n=1 then puissance:=x else begin intermediaire:=puissance(x,n div 2); if (n mod 2)=0 then puissance:=intermediaire*intermediaire else puissance:=intermediaire*intermediaire*x; end end;
int puissance(int a, int b){ if (b==0) return 1; if (b==1) return a; if ( (b & 0x01 ) == 0){ int c = puissance(a, b >> 1); return c * c; }else{ return a * puissance(a, b - 1); } }