参考文章来源:Reait Home(http://www.reait.com/blog.html) 转载请注明,谢谢合作。
快速幂取模 是一种常用的算法,这里总结下。
求a^b%c(这就是著名的RSA公钥的加密方法),当a,b很大时,直接求解这个问题不太可能
算法1:利用公式a*b%c=((a%c)*b)%c,这样每一步都进行这种处理,这就解决了a^b可能太大存不下的问题,但这个算法的时间复杂度依然没有得到优化
代码如下:
int Mod1(int a,int b,int n)
{
int cnt = 1;
while (b--)
{
cnt = a * cnt % n;
}
return cnt;
} </span>算法2:另一种算法利用了二分的思想,可以达到O(logn)。int Mod2(int a,int b,int n)
{
int t = 1;
if(b == 0)
return 1;
if(b == 1)
return a%n;
t=Mod2(a, b>>1, n);
t=t*t%n;
if (b&1)
{
t = t*a % n;
}
return t;
}实例代码2:非递归优化 :int Mod3(int a,int b,int y)
{
int cnt=1;
while(b)
{
if(b&1) cnt=cnt*a%y;
a=a*a%y;
b>>=1;
}
return cnt;
}原文地址:http://blog.csdn.net/u013050857/article/details/42319465