я могу генерировать все пары копервичной, следуя алгоритм тройного дерева, перечисленные в Википедии: https://en.wikipedia.org/wiki/Coprime_integersИтерации всех взаимно простых пар с использованием постоянного пространства?
Быстро:
Start with two coprime branches: (2,1), (3,1), then iterate:
Branch 1: (2m-n,m)
Branch 2: (2m+n,m)
Branch 3: (m+2n,n)
Однако пространство, используемое будет расти в три раза для каждой пары производства (и печатать, или иначе не хранить в памяти).
Здесь может быть решением в Haskell: Generating sorted list of all possible coprimes
Но я искал что-то в Python, который не имеет ленивые вычисления или бесконечные списки.
Просьба уточнить: Вам нужны те же ограничения, что и в проблеме Haskell? 'Первый элемент в каждой паре должен быть меньше второго. Сортировка должна выполняться в порядке возрастания - суммой парных элементов; и если две суммы равны, то по первому элементу пары. Если это так, вы хотите поменять эти пары в своем алгоритме. И у Python есть бесконечные генераторы, которые, вероятно, похожи на ваши «бесконечные списки». И пытаетесь ли вы избежать «роста в три раза» или вам просто нужен простой код Python? –
* «Но я искал что-то в python, у которого нет ленивых оценок или бесконечных списков». * Python имеет генераторы (которые дают значения лениво) и функции (особенно в 'itertools'), которые дают потенциально бесконечные последовательности. – Tagc
Я не искал ограничений от решения haskell, я должен был это сказать. И любое идиоматическое решение python будет работать независимо от ленивой/бесконечной терминологии. – user318904