模幂运算常常作为一些算法的中间求解步骤,算法的思路十分巧妙并且高效。模幂运算的描述如下:
已知b, e, m, 求c。形如:
其中,b<m (若b>m,可转换b为b%=m)
算法一:最显而易见的办法就是先求幂,再取模。例如
注意到b=4为1位,e=13为2位,m=497为3位,c=445为3位,但是 为8位。这很可能造成溢出,或者因为大整数运算而缓慢。
int e)
2: {
if (0 == b || 1 == b || 0 == e)
return 1;
if (1 == e)
return b;
int n = e>>1;
int tmp = Power(b, n);
if (0 == (e&1))
return tmp*tmp;
else
return tmp*tmp*b;
13: }