快速幂
对于 来说将其幂写成二进制格式,得到
不难得到在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
对于 来说将其幂写成二进制格式,得到
不难得到在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