您的位置:首页 > 其它

第一课 快速幂取模

2013-03-23 17:48 113 查看
站在acm的角度上看,《算法概论》这本书上感觉废话好多。

始终觉得学算法的最佳途径就是做题,而不是单纯的看书看伪算法。实现才是王道。

快速幂取模,其实也是以前写过的二分求幂,或离散课上的同余幂。

以前写的代码版本太乱,现在总结一下,以便以后碰到这类问题能直接对症下药。

求b^e mod m,b,e,m都是比较大的整数。

递归算法:

//快速幂取模
int modexp(int b, int e, int m)    //b是底数,e是指数,m是模
{
if (e == 0)
return 1;

int temp = modexp(b, e/2, m);

if (e%2)  //若e是奇数,那么除以2后会少乘一个b.
return b*temp*temp%m;
else
return temp*temp%m;
}


非递归算法:

int modexp(int b, int e, int m)
{
int ans = 1;

while (e)
{
if (e%2)  //若e是奇数,那么除以2后会少乘一个b.
ans = ans*b%m;

b = b*b%m;

e /= 2;
}

return ans;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: