Создание уникальных упорядоченных триплетов Пифагора
Значительно быстрее, чем 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
Создание уникальных упорядоченных триплетов Пифагора
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.