你好,我想作区间[4..n]
功能goldbach :: Integer -> Bool
应该返回True
仅在该区间的所有元素均匀,可以从两个一本正经的数字来概括。到目前为止,我已经做到了。哥德巴赫功能偶数[4..n]名单
goldbach::Integer->Bool
goldbach n
|goldbach2 n == ??? = goldbach (n-2)
|n==4 = True
|otherwise = False
goldbach2 :: Integer -> (Integer, Integer)
goldbach2 a = head $
filter (\(x,y) -> isPrime x && isPrime y) $
map (\e -> (e, a - e)) [3,5..a `div` 2]
where
factors a = filter (isFactor a) [2..a-1]
isFactor a b = a `mod` b == 0
isPrime a = null $ factors a
功能golbach2
结果看起来像这样goldbac2 28 = (5, 23)
。如果goldbach2 n
的结果是正确的,并且给我两个纯数字,我应该如何在我的第三行goldbach2 n == ??? = goldbach (n-2)
中行动?
你的描述必须是错误的,因为,只有符合条件的区间是[]和' [4..4]'因为所有其他人至少有一个奇数。因此,你所描述的简短版本是'g =(<= 4)' – Ingo
我不知道它怎么可能。如果我输入'n = 8',我应该有一个列表'[4,6,8]',它应该返回True。 –
是的,你实际上并没有在你的代码中构造区间'[4..n]'。在描述中,你真正的意思是'[4,6..n]' – Ingo