求解a^n后三位
该题目即为求解(a^n)%1000, 在求 a的n次方式为了加快运算使用快速幂算法
public static int fastPower(int a, int n){
int res = 1;
int base = a;
while (n != 0){
if ((n&1) == 1){
res *= base;
}
base *= base;
n >>= 1;
}
return res;
}
但为防止指数运算过程中出现爆炸现象(如果n太大会出现没有任何数据类型能够存储返回值),因此需要使用模运算:(ab)%p = (a%pb%p)%p。改进后的算法如下:
public static int fastPower(int a, int n, int p){
int res = 1;
int base = a%p;
while (n != 0){
if ((n & 1) != 0){
res = (res*base)%p;
}
base = (base*base)%p;
n >>= 1;
}
return res;
}