题目链接:传送门

题目描述:

  求Sqrt(x),返回整数值即可。

【代码】:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1e6+ ;
  4. /*
  5. int mySqrt ( int x ){
  6. int L = 1 , R = N , mid , ans = 0 ;
  7. while ( L <= R ){
  8. mid = ( L + R ) >> 1 ;
  9. if( mid <= x / mid ){
  10. L = mid + 1 ;
  11. ans = mid ;
  12. }else {
  13. R = mid - 1 ;
  14. }
  15. }
  16. return ans ;
  17. }
  18. */
  19. int mySqrt ( int x ) {
  20. if ( !x )
  21. return ;
  22. double eps = 1e-;
  23. double res = x , Last;
  24. while ( true ){
  25. Last = res ;
  26. res = 0.5 * ( res + x/res ) ;
  27. if( fabs( Last - res ) < eps){
  28. break ;
  29. }
  30. }
  31. return (int)res;
  32. }
  33. int main()
  34. {
  35. int n;
  36. while ( ~scanf("%d",&n) ) {
  37. printf(" Sqrt (%d) = %d \n",n,mySqrt(n) );
  38. }
  39. return ;
  40. }

mySqrt

【题解】:

  首先有两个做法。

  第一个就是二分法,大家要记住,这个方法需要判溢出,不然会一直错。需要“移乘变除”

  第二种方法就是我想写博客来记录的,我觉得真的非常好的一个想法,就是“牛顿迭代法”。

      主要参考博客和网站:1、求牛顿开方法的算法及其原理,此算法能开任意次方吗?

                2、如何通俗易懂地讲解牛顿迭代法?

                3、知乎“如何通俗易懂地讲解牛顿迭代法求开方?数值分析?”

  以下就是知乎一些比较出色的解答

  “黄徐升”的回答:

  

  有一个利用“将长方形变得更像正方形”的思路也可以得到求 的算数平方根的迭代公式

  算是通俗易懂地得到了这个迭代公式(不过并没有体现牛顿法的求导等过程,那个用抛物线的切线看是比较直观的,别的回答里已经有了)。

首先是考虑 是面积为 的正方形的边长,如果画一个邻边不等的面积是 长方形,设这个长方形的长为 ,宽为 ,那么怎样能让这个长方形变得更像一个正方形呢?是要把长变得短一点,宽变得长一点,可以用长和宽的平均数 来作为新的长 ,在面积不变的条件下,新的宽是 。这样不断操作下去,长方形的长和宽会越来越接近,就是一直趋近与 了。

  


【牛顿迭代法】

假设方程 在  附近有一个根,那么用以下迭代式子:
 
依次计算、……,那么序列将无限逼近方程的根。

牛顿迭代法的原理很简单,其实是根据f(x)在x0附近的值和斜率,估计f(x)和x轴的交点,看下面的动态图:

【用牛顿迭代法开平方】

令:
 
所以f(x)的一次导是:

牛顿迭代式:

随便一个迭代的初始值,例如,代入上面的式子迭代。

例如计算,即a=2。



……

计算器上可给出

【用牛顿迭代法开任意次方】

的递推式是:

  

【leetcode】【二分 | 牛顿迭代法】69_Sqrt(x)的更多相关文章

  1. 求sqrt()底层效率问题(二分/牛顿迭代)

    偶然看见一段求根的神代码,于是就有了这篇博客: 对于求根问题,通常我们可以调用sqrt库函数,不过知其然需知其所以然,我们看一下求根的方法: 比较简单方法就是二分咯: 代码: #include< ...

  2. 牛顿迭代法解指数方程(aX + e^x解 = b )

    高中好友突然问我一道这样的问题,似乎是因为他们专业要做一个计算器,其中的一道习题是要求计算器实现这样的功能. 整理一下要求:解aX + e^X = b 方程.解方程精度要求0.01,给定方程只有一解, ...

  3. 牛顿迭代法的理解与应用( x 的平方根)

    题目来源与LeetCode算法题中的第69题,具体内容如下(点击查看原题): 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只 ...

  4. NOIP2001 一元三次方程求解[导数+牛顿迭代法]

    题目描述 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差 ...

  5. Atitit 迭代法  “二分法”和“牛顿迭代法 attilax总结

    Atitit 迭代法  "二分法"和"牛顿迭代法 attilax总结 1.1. ."二分法"和"牛顿迭代法"属于近似迭代法1 1. ...

  6. 牛顿迭代法实现平方根函数sqrt

    转自利用牛顿迭代法自己写平方根函数sqrt 给定一个正数a,不用库函数求其平方根. 设其平方根为x,则有x2=a,即x2-a=0.设函数f(x)= x2-a,则可得图示红色的函数曲线.在曲线上任取一点 ...

  7. sqrt (x) 牛顿迭代法

    参考: 0开方 是 0 1的开方式 1 2的开方式 1.4 3.的开方=(1.4+3/1.4)/2 牛顿迭代法:学习自 http://blog.csdn.net/youwuwei2012/articl ...

  8. 【清橙A1094】【牛顿迭代法】牛顿迭代法求方程的根

    问题描述 给定三次函数f(x)=ax3+bx2+cx+d的4个系数a,b,c,d,以及一个数z,请用牛顿迭代法求出函数f(x)=0在z附近的根,并给出迭代所需要次数. 牛顿迭代法的原理如下(参考下图) ...

  9. 基于visual Studio2013解决C语言竞赛题之0422牛顿迭代法

      题目

随机推荐

  1. Git 命令行使用

    一.git简介: Linux创建了Linux,但是Linux的发展壮大是由世界各地的热心志愿者参与编写的?那么那么多份的代码是怎么合并的呢?之前是在2002年以前,世界各地的志愿者把源代码文件通过di ...

  2. git常用操作方法

    在实际开发,测试中,会使用git作为版本控制工具来完成团队协作.因此,对基本的git操作指令进行总结是十分有必要的,本文对一些术语或者理论基础,不重新码字,可以参考廖雪峰老师的博文,本文只对命令做归纳 ...

  3. webpack打包---报错内存溢出javaScript heap out of memory

    今天, npm run build打包时,又报内存溢出了.所以记录一下,之前查了博客有一些解释. “报错CALL_AND_RETRY_LAST Allocation failed - JavaScri ...

  4. Resend a Request by fiddler

    Resend a Request You can resend a request directly from the Sessions List, or save requests to resen ...

  5. LightGBM两种使用方式

    原生形式使用lightgbm(import lightgbm as lgb) import lightgbm as lgb from sklearn.metrics import mean_squar ...

  6. 2.4 Go语言基础之切片

    本文主要介绍Go语言中切片(slice)及它的基本使用. 一.引子 因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性. 例如: func arraySum(x [3]int) ...

  7. linux简单命令7--管道符和通配符

    ”&&“和管道符“|”不一样. ---------------------------------------------------------通配符---------------- ...

  8. 一百三十二:CMS系统之前端动态获取后台添加的轮播图

    先准备几张轮播图 排序顺序改为根据优先级倒序排 前端首页接口 @bp.route('/')def index(): banners = BannerModel.query.order_by(Banne ...

  9. [ML] Linear Discriminant Analysis

    虽然名字里有discriminat这个字,但却是生成模型,有点意思. 判别式 pk 生成式 阅读:生成方法 vs 判别方法 + 生成模型 vs 判别模型 举例: 判别式模型举例:要确定一个羊是山羊还是 ...

  10. PAT 甲级 1014 Waiting in Line (30 分)(queue的使用,模拟题,有个大坑)

    1014 Waiting in Line (30 分)   Suppose a bank has N windows open for service. There is a yellow line ...