用反复平方法求幂运算:(M=Cd)
一、反复平方法求幂运算的算法:
设:d= (dndn-1… d1d0)2
方法一:(right toleft)
M = 1; p = C;
For i= 0 to n do :
If(di==1) then
M = M*p;
endIf
p=p*p; //之所以称之为反复平方法的缘由。
endFor
方法二:(left to right)
M=1;
For i= n to 0 do:
M= M*M; //之所以称之为反复平方法的缘由
If(di == 1) then
M= M*C;
endIf
endFor
二、反复平方法求幂运算的算法的证明:
方法成立的的证明:
设 d = (dndn-1… d1d0)2
= dn*2n + dn-1*2n-1 + … + d1*21 + d0*20
M=Cd
= C^ (dn dn-1…d1d0)2
=C ^(dn*2n + dn-1*2n-1 + … + d1*21 + d0*20)
=C^(dn*2n) * C^(dn-1*2n-1)* … * C^( d1*21) *C^( d0*20)
=(C^2n)^dn *(C^2n-1)^dn-1 * …* (C^21)^d1* (C^20)^d0
而对C^2n= ((…((C^2)^2)^2 …)^2)^2 中n-1重括号;
可见上述算法是成立的。
三、反复平方法求幂运算的两个算法的比较:
方法一与方法二的比较:
方法二更好,因为M = M*C, 中的C是个常量,对与固定的C可以有些优化算法;
(1)根据C的二进制形式计算M*C 的方法称之为 binary method。
(2)加速binary算法可以先讲C分解(factor),再利用binary method,
称之为(factor and binary method)
四、反复平方法求幂运算的应用:
1.模幂运算:M =Cd mod N
只需在原算法中的每步运算中,加上mod N 就可以解决;
该算法可以用于RSA算法中。
利用Montgomery算法改写算法中求mod运算可以加速上述算法的执行。