Создание уникальных упорядоченных триплетов Пифагора

Значительно быстрее, чем python-interpreter любое из существующих на pythonista данный момент решений. Находит python-interpreter тройни через троичное дерево.

Wolfram говорит:

Холл pythonista (1970) и Робертс (1977) доказывают, что python это примитивная пифагорова pythonista тройка тогда и только тогда, когда

(a,b,c)=(3,4,5)M

где python M - конечное произведение arithmetic матриц U, A, D.

И у нас есть pythonista формула для генерации каждой py примитивной тройки.

В приведенной math выше формуле гипотенуза постоянно python-shell растет, поэтому проверить python-interpreter максимальную длину довольно python-shell легко.

В Python:

import numpy as np

def gen_prim_pyth_trips(limit=None):
    u = np.mat(' 1  2  2; -2 -1 -2; 2 2 3')
    a = np.mat(' 1  2  2;  2  1  2; 2 2 3')
    d = np.mat('-1 -2 -2;  2  1  2; 2 2 3')
    uad = np.array([u, a, d])
    m = np.array([3, 4, 5])
    while m.size:
        m = m.reshape(-1, 3)
        if limit:
            m = m[m[:, 2] <= limit]
        yield from m
        m = np.dot(m, uad)

Если вам нужны pythonic все тройки, а не только примитивы:

def gen_all_pyth_trips(limit):
    for prim in gen_prim_pyth_trips(limit):
        i = prim
        for _ in range(limit//prim[2]):
            yield i
            i = i + prim

list(gen_prim_pyth_trips(10**4)) потребовалось mathematics 2,81 миллисекунды, чтобы arithmetic вернуться с 1593 элементами, в py то время как list(gen_all_pyth_trips(10**4)) потребовалось maths 19,8 миллисекунды, чтобы math вернуться с 12471 элементом

Для mathematical справки: accepted answer (in python) потребовалось mathematics 38 секунд для 12471 элемента.

Ради arithmetic удовольствия, установив верхний python предел в один миллион, list(gen_all_pyth_trips(10**6)) вернет python-shell результат за 2,66 секунды python-shell с 1980642 элементами (почти python-shell 2 миллиона троек за 3 секунды). list(gen_all_pyth_trips(10**7)) ставит python-shell мой компьютер на колени, так python-shell как список становится настолько math большим, что поглощает все python до последнего бита оперативной math памяти. Выполнение чего-то mathematical вроде sum(1 for _ in gen_all_pyth_trips(10**7)) позволяет обойти это pythonic ограничение и выполнить возврат pythonic через 30 секунд с 23471475 arithmetic элементами.

Дополнительную py информацию об используемом pythonista алгоритме можно найти в статьях arithmetic на Wolfram и Wikipedia.

python

math

2022-11-07T14:26:37+00:00
Вопросы с похожей тематикой, как у вопроса:

Создание уникальных упорядоченных триплетов Пифагора