九章算法面试题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特别大的话,那么求幂就会变得特别快。
相关文章推荐
- 九章算法面试题82 合并有序链表
- 九章算法面试题13 随机数生成器
- 九章算法面试题39 分割数组
- 九章算法面试题49 用栈实现队列
- 九章算法面试题66 2 sum
- lintcode&九章算法——Google面试题:原子计数
- 九章算法面试题83 把0移到数组右边
- 九章算法面试题14 超过一半的数
- 九章算法面试题27 最大连续子集
- 九章算法面试题40 不用除法求积
- 九章算法面试题50 队列上实现Min函数
- 九章算法面试题67 3 sum
- 九章算法面试题69 排颜色 sort colors
- 九章算法面试题84 奇偶分割数组
- 九章算法 | Facebook 面试题 : 岛的周长
- 九章算法面试题51 二叉树的序列化
- 九章算法面试题68 4 sum
- 九章算法——面试题思路
- 程序员面试题精选100题(63)-数组中三个只出现一次的数字[算法]
- 九章算法面试题85 搜索区间