如何计算两个边界之间的素数双胞胎?

时间:2015-11-07 20:48:05

标签: haskell

我正在尝试计算它们之间有2个数字差距的前20个素数 - E.G 3和5。

toggle_active.js.erb

这适用于某一点,if divides :: Integer -> Integer -> Bool divides x y = y `mod` x == 0 prime :: Integer -> Bool prime n = n > 1 && and [not(divides x n) | x <- [2..(n-1)]] allprimes :: [Integer] allprimes = [x | x<- [2..], prime x] primeTest3 :: Integer -> [Integer] primeTest3 n = [ if y - x == 2 then y else x | x <- [3..n], y <- [2..n], prime x] ,然后输出为n = 20等。这显然是由if else语句引起的。如何才能打印出一定数量之间有多少孪生素数而没有重复?

1 个答案:

答案 0 :(得分:2)

整理我在评论中写的内容:

areTwoApart (x,y) = y - x == 2
filter areTwoApart (zip allprimes (tail allprimes))

...会给你素数对的列表,没有重复:

Prelude> take 10 $ filter areTwoApart (zip allprimes (tail allprimes))
[(3,5),(5,7),(11,13),(17,19),(29,31),(41,43),(59,61),(71,73),(101,103),(107,109)]

关于你的最后一个问题&#34;在一定数量之间有多少孪生素数而没有重复&#34;,我不确定你在&#34;之间的意思是什么?但是你可以使用上面的函数来实现它。