运算规则
模运算与基本四则运算有些相似,但是除法例外。其规则如下:
-
(a + b) % p = (a % p + b % p) % p (1)
-
(a - b) % p = (a % p - b % p) % p (2)
-
(a * b) % p = (a % p * b % p) % p (3)
题目:
Calculate the an % b where a, b and n are all 32bit integers.
Example
For 231 % 3 = 2
For 1001000 % 1000 = 0
Challenge
由上面的规则(3)可以看出用分治法求解,和pow(x,n)函数类似。
O(logn)
public int fastPower(int a,int b,int n)
{
if(n == 1)
return a%b;
if(n == 0)
return 1%b;//robust;
//(a*b)%p == ((a%p)*(b%p))%p; 即为递归公式
long product=fastPower(a,b,n/2);//use long to prevent pverflow;
product=(product*product)%b;
if(n%2 == 1)
{
product=(product*a)%b;
}
return (int) product;//long to int
}