【发布时间】:2016-02-16 02:34:29
【问题描述】:
我需要生成所有互质数的无限排序列表。 每对中的第一个元素必须小于第二个。 排序必须按升序进行——按对元素的总和;如果两个和相等,则乘以该对的第一个元素。
所以,结果列表一定是
[(2,3),(2,5),(3,4),(3,5),(2,7),(4,5),(3,7),(2,9),(3,8),(4,7)...`
这是我的解决方案。
coprimes :: [(Int, Int)]
coprimes = sortBy (\t1 t2 -> if uncurry (+) t1 <= uncurry (+) t2 then LT else GT) $ helper [2..]
where helper xs = [(x,y) | x <- xs, y <- xs, x < y, gcd x y == 1]
问题是我不能带n 第一对。我意识到无法对无限列表进行排序。
但是我怎样才能以惰性的方式生成相同的序列呢?
【问题讨论】:
-
诀窍可能是按升序为
2、3生成对,然后合并它们。
标签: list sorting haskell primes infinite