2024-09-01
算法刷题
00

浮点数的 n次方根:

牛顿迭代法:

python
class Solution: def sqrt_n(self, y, n) -> int: # f(x)=x**n-y=0 # f`(x)=n*x^(n-1) # x=x-(x**n-y)/(n*2^(n-1)) if n == 0: return 1 # x1 的 n1 次方 def pow1(x1, n1): if n1 == 0: return 1 y1 = pow1(x1, n1 // 2) return y1 * y1 if n1 % 2 == 0 else y1 * y1 * x1 x = 1 # 牛顿不动点迭代法 while True: x2 = x - (pow1(x, n) - y) / (n * pow1(x, n - 1)) if abs(x2 - x) < 1e-6: break x = x2 return x2

二分查找:

python
class Solution: def sqrt_n(self, y, n) -> int: assert n > 0 # x1 的 n1 次方 def pow1(x1, n1): if n1 == 0: return 1 y1 = pow1(x1, n1 // 2) return y1 * y1 if n1 % 2 == 0 else y1 * y1 * x1 # 二分查找,在0到y之间查找 b1, b2 = 0, y while True: x = (b1 + b2) / 2 if pow1(x, n) < y - 1e-2: b1 = x elif pow1(x, n) > y + 1e-2: b2 = x else: break return [x,-x]
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!