对于 来说将其幂写成二进制格式,得到 不难得到在i + 1时, ,而 则是一个indicator,表达当前二进制i

res = 1
while (n){
	if (n&1) res *= x; // res *= x^{1*2^i}
	// n&0 => res *= x^{0*2^i} => res *= 1
	x *= x; // x^{2^{i + 1}} = (x^{2^i})^2
}
return res