数论:幂乘
-
求x的幂乘可以利用x^n = (x ^ 2) ^ (n / 2)的性质,用反复平方法快速求出 :
pow(x, n)
- 1 (n=0时)
- pow(x * x, n / 2) (n为偶数时)
- pow(x * x, n / 2) * x (n为奇数时)
-
例如:2^11展开如下所示:
- 2^11 = ((2 * 2) ^ 5) * 2
- 4^5 = ((4 * 4) ^ 2) * 4
- 8^2 = (8 * 8) ^ 2
- 16^2 = (16 * 16) ^ 1
- 256^1 = ((256 * 256) ^ 0) * 256
- 65536^0 = 1
-
递归反复平方法
pow(x, n) if(n == 0) return 1; if((n & 1) == 0) return pow(x * x, n / 2); else return pow(x * x, n / 2) * x; //C++实现 constexpr double mypow(double x, uint32_t n) noexcept { return (n == 0) ? 1 : ((n & 1) == 0) ? pow(x * x, n / 2) : (pow(x * x, n / 2) * x); }