快速幂是利用二进制的特性来求一个数的N次方的算法

比如一个数 5^18
正常来说 要算18个5相乘
但是我们看看18这个数写成2进制10010
那我们可以把5^18看成

int quick_pow(int a, int b) {
	int ans = 1;
	int base = a;
	while (b) {
		if (b & 1) {
			ans *= base;
		}
		base *= base;
		b >>= 1;
	}
	return ans;
}

看下代码 base是5 如果18的二进制的最后一位是1 那么ans就变第一次变化是ans=1*25
第二变化是
ans=25*5^16
你看 是不是运算次数少了很多


愿风指引你的道路,愿你的刀刃永远锋利。