Haskell 偶数列表的哥德巴赫函数[4..n]
您好,我正在尝试为间隔Haskell 偶数列表的哥德巴赫函数[4..n],haskell,primes,Haskell,Primes,您好,我正在尝试为间隔[4..n]创建一个函数goldbach::Integer->Bool,该函数应该返回True,前提是该间隔中的所有元素都是偶数,并且可以从两个基本数求和。到目前为止,我已经做到了这一点 goldbach::Integer->Bool goldbach n |goldbach2 n == ??? = goldbach (n-2) |n==4 = True |otherwise = False goldbach2 :: Integer -&g
[4..n]
创建一个函数goldbach::Integer->Bool
,该函数应该返回True
,前提是该间隔中的所有元素都是偶数,并且可以从两个基本数求和。到目前为止,我已经做到了这一点
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)
。我应该如何在我的第三行goldbach2n==?=哥德巴赫(n-2)
如果哥德巴赫2 n
的结果是正确的,并且给了我两个基本的数字?如果我理解正确,你想要的是:
| let (n1, n2) = goldbach2 n in n == n1 + n2 = goldbach (n-2)
我会这样写
goldbachInterval n = all goldbach [4,6 .. n]
where
goldbach k = .... -- property of being a golbach number
是的,我想这是我需要的东西,但是你能告诉我应该如何使用它吗?我不能简单地用你的第三行替换我的第三行,或者我可以吗?我想你可以,尽管我还没有测试过它。让。。。in子句是条件,单个“=”是该条件的值。哦,我忘了开头的“|”。我将在中编辑它。是的,但问题是我得到了一个错误,goldbatch得到的参数很少。是的,不必介意它只需要
n
在goldbatch2
之后,您的描述一定是错误的,因为唯一的限定间隔是[]和[4..4]
,因为在所有其他间隔中至少有一个奇数。因此,您描述的内容的简短版本是g=(我不明白这是怎么回事。如果我输入n=8
,我应该有一个列表[4,6,8]
,它应该返回True。是的,您实际上没有在代码中构造间隔[4..n]
。在描述中,您真正的意思是[4,6..n]
那么我应该如何更改它以使其正确?