1
  • Basetri 看起来就像欧几里得算法的维基百科定义(但我只保存周长),并且似乎生成所有三角形。

  • Timesify 给出这些三角形的所有倍数(120 三角形出现 3 次)

  • 然后我连接,排序和分组以给出同一组中每个周长的列表列表,然后过滤超过 1 的列表,只是一种制作周长的方法。

这应该给我所有可能以一种方式完成的三角形,但 length euler75 = 157730似乎不是有效的答案。

euler75 = filter justOneElement $ group $ sort $ concat $ timesify (takeWhile (<=1500000) basetri)

justOneElement (x:[]) = True
justOneElement _ = False

basetri = [((x m n + y m n + z m n)) | m<-[1..700],n<-[1..(m-1)], odd (m-n),gcd m n == 1]
    where
        x m n = (m^2 - n^2)
        y m n = 2*m*n
        z m n = (m^2+n^2)

timesify [] = []
timesify (x:xs) = (takeWhile (<=1500000) $ (map (*x) [1..])) : timesify xs
4

1 回答 1

1

变成

triangs :: Integer -> [Integer]
triangs l = [p | n <- [2..1000],
               m <- [1..n-1],
               gcd m n == 1,
               odd (m+n),
               let p = 2 * (n^2 + m*n),
               p <= l]

现在它可以工作了

于 2014-02-10T22:05:08.990 回答