自用筆記42 牛頓迭代法 完全平方數性質

2021-10-25 22:16:13 字數 1776 閱讀 8453

給定乙個正整數 num,編寫乙個函式,如果 num 是乙個完全平方數,則返回 true,否則返回 false。

說明:不要使用任何內建的庫函式,如 sqrt。

示例 1:

輸入:16

輸出:true

示例 2:

輸入:14

輸出:false

這裡有大概四種方法處理這個問題,第一種暴力無腦迴圈

class

solution

:def

isperfectsquare

(self, num:

int)

->

bool

: i =

1while i * i < num:

i +=

1return i * i == num;

首先i從1開始,判斷這個數是不是i的平方

不是的話,i 每次加1

直到超過了num

第二種在第一種思路上優化一下,使用老朋友二分查詢

class

solution

:def

isperfectsquare

(self, num:

int)

->

bool

:if num <2:

return

true

left, right =

2, num //

2while left <= right:

x = left +

(right - left)//2

guess_squared = x * x

if guess_squared == num:

return

true

if guess_squared > num:

right = x -

1else

: left = x +

1return

false

第三種,運用完全平方數的性質:任意乙個平方數可以表示成這樣的奇數序列和:

bool isperfectsquare

(int num)

return false;

}

第四種就是牛頓迭代法

}這是我的笨比牛頓迭代法,這是簡潔版的:

class

solution

:def

isperfectsquare

(self, num:

int)

->

bool

: i = num

while i * i > num:

i =(i + num / i)//2

return i * i == num

牛頓迭代法也是sqrt()函式的一種原

牛頓迭代法求平方根

sqrt 方法 public static double sqrt double c 什麼是牛頓迭代法 多數方程不存在求根公式,牛頓提出了一種用迭代來求方程近似根的方法。思路就是不斷取切線,用線性方程的根逼近非線性方程f x 0的根x 過程簡介 過點 xk,f xk 作函式的切線,切線方程是 切線與...

牛頓迭代法 求平方根

牛頓迭代法 求出根號a的近似值 首先隨便猜乙個近似值x,然後不斷令x等於x和a x的平均數,迭代個六七次後x的值就已經相當精確了。例如,我想求根號2等於多少。假如我猜測的結果為4,雖然錯的離譜,但你可以看到使用牛頓迭代法後這個值很快就趨近於根號2了 這種演算法的原理很簡單,我們僅僅是不斷用 x,f ...

牛頓迭代法求平方根

牛頓迭代法 newton s method 又稱為牛頓 拉夫遜 拉弗森 方法 newton raphson method 它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。方法使用函式f x...