求*方根

# x*方根

# 暴力求解
def func1(x: int):
i = 1
while True:
if i * i < x:
i += 1
elif i * i == x:
return i
else:
return i - 1


# 二分查找
def func2(x: int):
index = 0
left = 1
right = x
while left <= right:
mid = (left + right) // 2
if mid * mid <= x:
index = mid
left = mid + 1
else:
right = mid - 1
return index


# 牛顿迭代
def func3(x: int):
return int(sqrt(1, x))


def sqrt(i: int, x: int):
'''
:param i: 基数
:param x: *方数 i + x/i 的之间的差值越小,会越来越接**方根,例如24:2*12,3*8,4*6
:return:
'''
if (i + x / i) / 2 * (i + x / i) / 2 <= x:
return i
else:
return sqrt((i + x / i) / 2, x)


print(func1(24))
print(func2(24))
print(func3(24))
posted @ 2022-05-13 23:11  狒狒桑  阅读(21)  评论(0编辑  收藏  举报