虽然可能不是最好的方法,但如果您首先生成所有可能的对然后过滤它们,它应该会起作用。
所以使用你的标准:
pairs :: [(Integer,Integer)]
pairs = [ (i,l-i) | l <- [1..], i <- [1..l-1] ]
coprimes :: [(Integer,Integer)]
coprimes = [ (i,j) | (i,j) <- pairs, 1 < i, i < j,gcd i j == 1]
产生
λ> take 10 coprimes
[(2,3),(2,5),(3,4),(3,5),(2,7),(4,5),(3,7),(2,9),(3,8),(4,7)]
现在当然你可以放一些东西1 < i
and i < j
浮现在脑海中pairs
定义甚至加入他们,但我认为这里发生的事情更明显