求:b ^ x
一般算法:计算x次
快速算法:
1. b转换为二进制:e.g. x = 11, aka (001011)
2. 每次判断 x 的最后一位是否为1,若为1,则对应的答案乘上此时的b,
并将b向右移动一位,更新b= b^2
b b^2 b^4 b^8...
3.若不为1,则只更新b = b^2, 移位观察b的下一位,直到b = 0;
while (p > 0) {
if ((p & 1) == 1) { //与运算,判断是否末位为1
ans.multiply(BigInteger.valueOf(a));
base *= base; //更新base到它的二次方
p = p >> 1; //右移一位
}else {
base *= base;
p = p >> 1;
}
}