偶数列表的哥德巴赫函数 [4..n]
Goldbach function for list of even numbers [4..n]
你好,我正在尝试为区间 [4..n]
创建一个函数 goldbach :: Integer -> Bool
只有当该区间中的所有元素都是偶数并且可以求和时才应该 return 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)
。如果 goldbach2 n
的结果正确并给了我两个原始数字,我应该如何检查我的第 3 行 goldbach2 n == ??? = goldbach (n-2)
?
如果我没理解错的话,你想要这样的东西:
| 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
你好,我正在尝试为区间 [4..n]
创建一个函数 goldbach :: Integer -> Bool
只有当该区间中的所有元素都是偶数并且可以求和时才应该 return 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)
。如果 goldbach2 n
的结果正确并给了我两个原始数字,我应该如何检查我的第 3 行 goldbach2 n == ??? = goldbach (n-2)
?
如果我没理解错的话,你想要这样的东西:
| 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