九章算法官网-原文网址
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特别大的话,那么求幂就会变得特别快。
时间: 2024-10-09 05:22:42