第一课 快速幂取模
站在acm的角度上看,《算法概论》这本书上感觉废话好多。
始终觉得学算法的最佳途径就是做题,而不是单纯的看书看伪算法。实现才是王道。
快速幂取模,其实也是以前写过的二分求幂,或离散课上的同余幂。
以前写的代码版本太乱,现在总结一下,以便以后碰到这类问题能直接对症下药。
求b^e mod m,b,e,m都是比较大的整数。
递归算法:
1 //快速幂取模 2 int modexp(int b, int e, int m) //b是底数,e是指数,m是模 3 { 4 if (e == 0) 5 return 1; 6 7 int temp = modexp(b, e/2, m); 8 9 if (e%2) //若e是奇数,那么除以2后会少乘一个b. 10 return b*temp*temp%m; 11 else 12 return temp*temp%m; 13 }
非递归算法:
1 int modexp(int b, int e, int m) 2 { 3 int ans = 1; 4 5 while (e) 6 { 7 if (e%2) //若e是奇数,那么除以2后会少乘一个b. 8 ans = ans*b%m; 9 10 b = b*b%m; 11 12 e /= 2; 13 } 14 15 return ans; 16 }
转载请注明出处http://www.cnblogs.com/chenyg32/