Почему бинарный поиск длиться бесконечно?
Я решал 9 задачу из проекта Эйлера и решил использовать бинарный поиск. Что то пошло не так, программа доходит до поиска и на этом моменте ничего не происходит. Я анализировал что не так, но ничего кроме того что происходит именно бесконечный бинарный поиск ничего не понял. Что с ней не так:
def nums(x, y, z):
if resx[x] + resx[y] == resx[z]:
return True
def findx(x):
nlist = resx[:]
while True:
mid = len(nlist) // 2
if nlist[mid] == x:
return mid
elif nlist[mid] > x:
nlist = nlist[:mid]
else:
nlist = nlist[mid:]
def findy(y):
nlist = resx[:]
while True:
mid = len(nlist) // 2
if nlist[mid] == y:
return mid
elif nlist[mid] > y:
nlist = nlist[:mid]
else:
nlist = nlist[mid:]
def findz(z):
nlist = resx[:]
while True:
mid = len(nlist) // 2
if nlist[mid] == z:
return mid
elif nlist[mid] > z:
nlist = nlist[:mid]
else:
nlist = nlist[mid:]
def find(x, y, z):
return findx(x), findy(y), findz(z)
resx = list()
resy = list()
for i in range(1, 1001):
resy.append(i)
resx.append(i ** 2)
for x in resy:
for y in resy:
for z in resy:
if x + y + z == 1000:
x, y, z = find(x, y, z)
if resx[x] * resx[y] == resx[z]:
print(resy[x], resy[y], resy[z], resy[x] * resy[y] * resy[z])
Вот так звучит сама задача если зачем то понадобится:
Тройка Пифагора - три натуральных числа a < b < c, для которых выполняется равенство
a2 + b2 = c2 Например, 32 + 42 = 9 + 16 = 25 = 52.
Существует только одна тройка Пифагора, для которой a + b + c = 1000. Найдите произведение abc.