gpt4 book ai didi

haskell - Haskell中的毕达哥拉斯三元组没有对称解

转载 作者:行者123 更新时间:2023-12-03 14:39:56 24 4
gpt4 key购买 nike

我必须在没有对称解决方案的情况下在 Haskell 中做毕达哥拉斯三元组。我的尝试是:

terna :: Int -> [(Int,Int,Int)]
terna x = [(a,b,c)|a<-[1..x], b<-[1..x], c<-[1..x], (a^2)+(b^2) == (c^2)]

结果我得到:
Main> terna 10
[(3,4,5),(4,3,5),(6,8,10),(8,6,10)]

如您所见,我得到了对称的解决方案,例如:(3,4,5)(4,3,5)。我需要摆脱它们,但我不知道如何。谁能帮我?

最佳答案

每次你有一个副本,你就有一个版本,其中 a 大于 b 和一个版本,其中 b 大于 a。因此,如果您想确保只得到其中一个,您只需要确保 a总是等于或小于 b或相反亦然。

实现此目的的一种方法是将其作为条件添加到列表理解中。

另一种更有效的方法是更改​​ b的生成器到 b <- [1..a] ,所以它只生成 b 的值小于或等于 a .

说到效率:无需迭代 c一点也不。一旦你有了 a 的值和 b ,您可以简单地计算 (a^2)+(b^2)并检查它是否具有自然平方根。

关于haskell - Haskell中的毕达哥拉斯三元组没有对称解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7261667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com