Description:
Calculate the a^n % b where a, b and n are all 32bit integers.
Note:
1.注意a,b,n都是32位的integers,所以不能硬算,网上找到了一个公式:
(a * b) % p = ((a % p) * (b % p)) % p
可以根据这个公式进行递归运算。
2.注意a,b,n三个的边界值。
3.为了减少运算时间,需要用tmp对中间结果进行保存,然后求tmp*tmp,注意此时tmp*tmp可能超过integet最大值,所以tmp的数据类型应为long long。
Calculate the a^n % b where a, b and n are all 32bit integers.
Note:
1.注意a,b,n都是32位的integers,所以不能硬算,网上找到了一个公式:
(a * b) % p = ((a % p) * (b % p)) % p
可以根据这个公式进行递归运算。
2.注意a,b,n三个的边界值。
3.为了减少运算时间,需要用tmp对中间结果进行保存,然后求tmp*tmp,注意此时tmp*tmp可能超过integet最大值,所以tmp的数据类型应为long long。
Code:
class Solution {
public:
/*
* @param a, b, n: 32bit integers
* @return: An integer
*/
int fastPower(int a, int b, int n) {
// write your code here
if (!a)
return 0;
if (n == 1)
return a % b;
if (!n)
return 1 % b;
if (b == 1)
return 0;
long long tmp = fastPower(a, b, n / 2);
if (n % 2==0)
return( tmp * tmp) % b;
else
return ((tmp * tmp % b)*( a % b) ) % b;
}
};