手写快速幂函数。
由于这里需要对p取模,而且p在int范围内,所以不需要高精度。所以就用位运算吧。这里仍然要用到二进制的思想,将b转为2进制来做。eg. ∵11 = 1011(2) = 1 * 2^3 + 0 * 2 ^2 + 1 * 2^1 + 1 * 2^0,∴2^11 = 2^(1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0) = 2^(2^3) * 2^(2^1) * 2^(2^0)。
代码如下:
#include <stdio.h>
int power(int a, int b, const int &p){
int ans = 1 % p;/*若b == 0 && p == 1,则 ans = a^b % p = 1 % p = 0。但实际的a^b = 1,所以
这里特殊判断一下*/
for(; b; b >>= 1){
if(b & 1) ans = (long long) ans * a % p;
a = (long long)a * a % p;
}
return ans;
}
int main(){
int a, b, p;
scanf("%d%d%d", &a, &b, &p);
printf("%d\n", power(a, b, p));
return 0;
}
潇洒地结束~