Найти примитивные пифагорейские тройки

Давайте разберемся с этим: я уже посмотрел этот ответ здесь. Мой подход, однако, отличается. Я использую функцию сопряжения канторов и в основном отображаю триплеты как целые числа. полная последовательность выглядит следующим образом:

1) перебрать (i,j) и добавить кантор (i,j) в массив до тех пор, пока gcd(i,j) == 1 и i

2) сортировка от наименьшего к наибольшему

Мое рудиментарное понимание заставило бы меня думать, что это должно вернуть упорядоченный набор примитивных пифагорейских троек, не так ли?

Вот код:

def go(n):
    tmpi = []
    for i in range(1,n):
        for j in range(n%2 +1,n,2):
            if gcd(i,j) == 1:
                if (i+j)%2 == 1:
                    if i < j:
                        tmpi.append(cantor(i,j))
    tmpi.sort()
    return tmpi

и канторная функция:

def cantor(x,y):
    return int(0.5*(x+y)*(x+y+1)+y)

Я что-то пропустил?

Редактировать:

С этим дополнительным кодом:

def lister(li):
    tmp = []
    for i in li:
        tmp.append(list(retTrp(invCant(i))))
    return tmp

def listi2(li):
    for i in li:
        i.sort()

def sorti(li):
    return sorted(li, key=itemgetter(2))

def doall(n):
    tmp = lister(go(n))
    listi2(tmp)
    return sorti(tmp)    

Вход:

doall(100)[99]

должен вернуться

[429, 460, 629]

но вместо этого возвращается, когда ввод

doall(100)[100]

Отсюда и мой вопрос по поводу заказа.

0 ответов

Другие вопросы по тегам