快速冪算法——可迅速求出a^b。其主要理論依據如下:
1,當b為偶數時,a^b可以轉為a^2的b/2次方。
2,當b為奇數時,a^b可以轉為a^2的b/2次方,再乘以a。
1 int quick(int a,int b) 2 { 3 int s = 1; 4 while (b > 0) { 5 if (b % 2 == 1) {//b=b>>1保證了在最后一步肯定會執行該if判斷 6 s = s * a; 7 } 8 a = a * a; 9 b = b >> 1; 10 } 11 return s; 12 }
利用快速冪方法可以迅速求出一個數的任意次方。再結合a*b%m=(a%m)*(b%m)%m,就可得出下面計算代碼:
int mod_exp(int a, int b, int c) //快速冪取余a^b%c
{
int res, t;
res = 1;
t = a % c;
while (b)
{
if (b & 1)
{
res = res * t % c;
}
t = t * t % c;
b >>= 1;
}
return res;
}