问题描述
如何在较快的时间内计算xnx^nxn,其中nnn可以是正数或负数,或0
- 暴力计算时间复杂度很高!
- 考虑采用快速幂算法求解。
快速幂算法(Divide and conquer )
- 只考虑nnn为正数的情况
- 对于负数的情况只需要先求出正数的情况,再求倒数
- 对于xnx^nxn的情形,考虑划分如下子问题
- 将xnx^nxn对半剖分,即分成解答x⌊n/2⌋x^{\lfloor n/2 \rfloor}x⌊n/2⌋和xn−⌊n/2⌋x^{n - \lfloor n/2 \rfloor}xn−⌊n/2⌋
- 分别求解两个部分。
- 当n是偶数时,有⌊n/2⌋=n−⌊n/2⌋\lfloor n/2 \rfloor = n - \lfloor n/2 \rfloor⌊n/2⌋=n−⌊n/2⌋
- 当n是奇数时,有⌊n/2⌋+1=n−⌊n/2⌋\lfloor n/2 \rfloor +1= n - \lfloor n/2 \rfloor⌊n/2⌋+1=n−⌊n/2⌋
- 因此给出了一种递归算法:
- 递归求解 x⌊n/2⌋x^{\lfloor n/2 \rfloor}x⌊n/2⌋

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



