import numpy as np
def bin_search_sqrt(num):
left, right = 0, num
while right - left > 1:
mid = (left + right) // 2
if mid ** 2 > num:
right = mid
else:
left = mid
return right if right**2 - num < num - left**2 else left
for i in range(15, 37):
print(i,bin_search_sqrt(i),np.sqrt(i))输出:
16 4 4.0 17 4 4.12310562562 18 4 4.24264068712 19 4 4.35889894354 20 4 4.472135955 21 5 4.58257569496 22 5 4.69041575982 23 5 4.79583152331 24 5 4.89897948557 25 5 5.0 26 5 5.09901951359 27 5 5.19615242271 28 5 5.29150262213 29 5 5.38516480713 30 5 5.47722557505 31 6 5.56776436283 32 6 5.65685424949 33 6 5.74456264654 34 6 5.83095189485 35 6 5.9160797831 36 6 6.0
看上去好像是可以的?