您的位置:首页 > 其它

LintCode x的平方根

2015-10-05 20:23 281 查看
x的平方根

实现 int sqrt(int N) 函数,计算并返回 N 的平方根。

样例

sqrt(3) = 1

sqrt(4) = 2

sqrt(5) = 2

sqrt(10) = 3

挑战

O(log(x))

solution: 如果使用蛮力法来求解的话,肯定是会超时的。因此,我们需要使用牛顿迭代法来求解这问题

牛顿迭代法: 对于给定一个函数f(x) = 0,的解为x0x_{0};那么我们可以通过牛顿迭代的方法来求解x0x_{0}, 其迭代公式为:

xk+1=xkx_{k+1} = x_{k} - f(xk)f′(xk)\frac{f(x_{k})}{f'(x_{k})}

当xk+1−xk<ϵx_{k+1} - x_{k} < \epsilon 时停止迭代, ϵ\epsilon为精度, xkx_{k}的初始值一般取0,或者1。

在本题中取f(x)=x2−Nf(x) = x^{2} - N,因此我们有:

xk+1=xk−x2k−N2∗xkx_{k+1} = x_{k} - \frac{x_{k}^{2} - N}{2*x_{k}}

化简得:

xk+1=12(xk+Nxk)x_{k+1} = \frac{1}{2}(x_{k} + \frac{N}{x_{k}})

code :

class Solution {
public:
/**
* @param x: An integer
* @return: The sqrt of x
*/
int sqrt(int x) {
double i = 1, j;
do {
j = (i + x / i) * 0.5;
if (abs(j -i) < 1)
return (int) j;
i = j;
} while (1);

return 1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: