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