九章算法面试题63 快速幂

时间:2015-05-13 10:29:18   收藏:0   阅读:172

九章算法官网-原文网址

http://www.jiuzhang.com/problem/64/


题目

计算(a^n)%b,其中a,b和n都是32位的整数。 例如 (2^31)%3 = 2。


在线测试本题

http://lintcode.com/zh-cn/problem/fast-power/


解答


首先我们要知道mod运算的一个定理:

(a * b) % p = (a % p * b % p) % p  

由这个定理我们可以知道

原来a^n % b

1.如果n 为奇数可以转化为 (a^(n/2) * a^(n/2) *  a ) %b = ((a^(n/2)%b * a^(n/2)%b)%b * (a)%b) %b

2. 如果n 为偶数可以转化为   (a^(n/2) * a^(n/2) ) %b = (a^(n/2)%b * a^(n/2)%b)%b 

由于知道a^1 = a , a^0=1 ,

然后递归的去求a^n ,这样我们每次就二分n,那么我们的实际的时间复杂度是O(log(n))。

所以当n特别大的话,那么求幂就会变得特别快。


评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!