计算 an a n %b,其中a,b和n都是32位的整数。
样例
例如
231
2
31
% 3 = 2
例如
1001000
100
1000
% 1000 = 0
挑战
O(logn)
思路
利用二分法,注意中间结果都要模b
an={n为奇数,n为偶数,an=an/2∗an/2∗aan=an/2∗an/2
a
n
=
{
n
为
奇
数
,
a
n
=
a
n
/
2
∗
a
n
/
2
∗
a
n
为
偶
数
,
a
n
=
a
n
/
2
∗
a
n
/
2
#ifndef C140_H
#define C140_H
#include<iostream>
using namespace std;
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 (b == 0||n < 0)
return -1;
if (n == 0)
return 1 % b;
if (n == 1)
return a%b;
long long res = fastPower(a, b, n >> 1)%b;//二分法
res = (res*res) % b;
//注意n为奇数的情况
if (n & 1 == 1)
res = (res*a) % b;
return res;
}
};
#endif