您的位置:首页 > 职场人生

九章算法面试题63 快速幂

2015-05-13 02:22 267 查看

九章算法官网-原文网址

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特别大的话,那么求幂就会变得特别快。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: