29 lines
586 B
Python
29 lines
586 B
Python
# Sqrt(x)
|
|
# Do not use build in operator
|
|
|
|
|
|
class Solution:
|
|
def mySqrt(self, c: int) -> int:
|
|
# Use Newton's method, return the smaller root
|
|
# fx = x ** 2 - c
|
|
# Xn-1 = 0.5 * (Xn + c / Xn)
|
|
if c == 0:
|
|
return 0
|
|
|
|
if c == 1:
|
|
return 1
|
|
|
|
x = c / 2
|
|
while True:
|
|
next_x = (x + c / x) / 2
|
|
if x - next_x > -1 and x - next_x <= 0:
|
|
break
|
|
x = next_x
|
|
|
|
return int(x)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
print(Solution().mySqrt(13))
|
|
print(Solution().mySqrt(16))
|