leetcode:Sqrt(x) 牛顿迭代法求整数开方
来源:互联网 发布:阿巴町手表软件下载 编辑:程序博客网 时间:2024/05/24 23:13
牛顿迭代法求Sqrt(x)
为了方便理解,就先以本题为例:
计算x2 = n的解,令f(x)=x2-n,相当于求解f(x)=0的解,如左图所示。
首先取x0,如果x0不是解,做一个经过(x0,f(x0))这个点的切线,与x轴的交点为x1。
同样的道理,如果x1不是解,做一个经过(x1,f(x1))这个点的切线,与x轴的交点为x2。
以此类推。
以这样的方式得到的xi会无限趋近于f(x)=0的解。
判断xi是否是f(x)=0的解有两种方法:
一是直接计算f(xi)的值判断是否为0,二是判断前后两个解xi和xi-1是否无限接近。
经过(xi, f(xi))这个点的切线方程为f(x) = f(xi) + f’(xi)(x - xi),其中f'(x)为f(x)的导数,本题中为2x。令切线方程等于0,即可求出xi+1=xi - f(xi) / f'(xi)。
继续化简,xi+1=xi - (xi2 - n) / (2xi) = xi - xi / 2 + n / (2xi) = xi / 2 + n / 2xi = (xi + n/xi) / 2。
有了迭代公式xi+1= (xi + n/xi) / 2,程序就好写了。关于牛顿迭代法,可以参考wikipedia以及百度百科。
#include <iostream>#include <math.h>using namespace std;int sqrts(int x){ double pre; double cur=1; do{ pre=cur; cur=x/(2*pre)+pre/2.0; }while(fabs(cur-pre)>0.000001); return int(cur);}int main(){ int b=0; while(1) { cin>>b; int a=sqrt(b); cout<<a<<endl; } return 0;}
0 0
- leetcode:Sqrt(x) 牛顿迭代法求整数开方
- leetcode 69. Sqrt(x)(C语言,牛顿迭代法求开方问题)46
- 牛顿迭代法求开方
- leetcode Sqrt(x) 求开方
- 【leetcode】:leetcode 69 Sqrt(x) 牛顿迭代法
- LeetCode *** 69. Sqrt(x) 牛顿迭代法
- 牛顿迭代法求高精度开方
- 牛顿迭代法求开方值
- 牛顿迭代法求高精度开方
- LeetCode 69: Sqrt(x) 求根号x(牛顿迭代法和二分查找法)
- 二分法、牛顿迭代法求sqrt()
- Sqrt(x) ,二分法,牛顿迭代法
- java 实现 牛顿迭代法求开方
- 通俗易懂地讲解牛顿迭代法求开方
- 不用sqrt库函数求一个整数的平方根(牛顿迭代法)
- leetcode 69. Sqrt(x) 牛顿法求平方根
- Leetcode Sqrt(x):牛顿迭代法和Quake-III中的神奇方法
- 每天一道LeetCode-----重新实现开方运算sqrt(x),只返回整数部分即可
- OGRE(五)
- 在校大学生如何修炼成公司“CTO”?
- 关于auto_ptr的一些事
- type="text/javascript" type="application/javascript"
- Oanda外汇账户2012年总结
- leetcode:Sqrt(x) 牛顿迭代法求整数开方
- ios 7 兼容问题
- db file scattered read
- sql server通配符处理样例
- Android设计模式系列--模板方法模式
- hdoj1287_破译密码
- C#-字符串的加解密,DES标准,DESCryptoServiceProvider---ShinePans
- 方便的CSS和jQuery下拉菜单解决方案
- Hibernate连接池的配置