计算 x 的 n 次方
通常情况下我们计算某数的整数次幂使用的是 for
循环,如下:
uint64_t x_power(uint32_t x, uint32_t n)
{
uint64_t y = 1;
uint32_t i = 0;
for(i = 0; i < n; i++)
{
y *= x;
}
return y;
}
上述源码中,计算 n
次幂需要 n - 1
次的乘法操作。
使用分治法可以减少乘法的次数。
uint64_t x_power(uint32_t x, uint32_t n)
{
uint64_t y = 1;
uint64_t tmp = 0;
if(1 == n)
{
y = x;
}
else //n != 1
{
if(1 == (n & 0x01)) //n 为奇数
{
y = x;
}
tmp = x_power(x, n >> 1); // n >> 1 = n / 2
y *= tmp * tmp;
}
return y;
}