求余计算
题目:求解a b mod c
-
普通求解
首先计算ab ,然后求模;这样会造成ab可能超过INT_MAX,并且复杂度为O(N) -
循环求余
int a;
int c;
int rexm = 1;//如果c取值超过了INT_MAX,rexm使用long型
for(int i=0;i<b;i++)
{
rexm = (rexm*a)%c;
}
- 快速幂求余
递归思路
int quickMod(int a, int b, int c)
{
int ans = 1;
while (b)
{
if (b % 2 == 1)
ans = (ans * a) % c;
b /= 2;
a = (a * a) % c;
}
return ans;
}
快速幂时间复杂度O(lonN)