码迷,mamicode.com
首页 > 编程语言 > 详细

九章算法面试题63 快速幂

时间:2015-05-13 10:29:18      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:分治   leetcode   九章算法   lintcode   面试题   

九章算法官网-原文网址

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特别大的话,那么求幂就会变得特别快。


九章算法面试题63 快速幂

标签:分治   leetcode   九章算法   lintcode   面试题   

原文地址:http://blog.csdn.net/jiuzhang_ninechapter/article/details/45681843

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!