У вас мало логики в вашей основной рутине.Ничто не может гарантировать, что тройка приходит только в одном порядке: ваши x
и y
являются взаимозаменяемыми, и вы гарантируете, что вы проверите оба.ограничения, а затем убедитесь, что вы останавливаетесь, когда значение y
или z
становится слишком большим, чтобы быть жизнеспособным.Обратите внимание, что это избавляет вас от чека на сумму трех.
def tuplePyth(n):
list_=[]
for x in range(1, n):
for y in range(1, n):
for z in range (1, n):
if x+y+z<=n:
if smallestTrip(x, y, z)==False:
list_.append([x,y,z])
print (list_)
Вместо:
def tuplePyth(n):
list_=[]
for x in range(1, n):
for y in range(x + 1, (n - x) // 2):
for z in range (y + 1, n - x - y):
if smallestTrip(x, y, z)==False:
list_.append([x,y,z])
print (list_)
Вывод с n = 100:
[[5, 12, 13], [7, 24, 25], [8, 15, 17], [9, 40, 41], [15, 36, 39], [16, 30, 34], [20, 21, 29]]
Обратите внимание, что у вас все еще есть проблема с smallestTrip
: ваш чек логически не эквивалентен «наименьшей тройке».Вместо этого проверьте, что три числа относительно простые.Поскольку переполнение стека допускает только один вопрос на публикацию, и проблема легко исследуется в режиме онлайн, я оставлю это в качестве упражнения для студента.: -)