我正在尝试计算它们之间有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语句引起的。如何才能打印出一定数量之间有多少孪生素数而没有重复?
答案 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;之间的意思是什么?但是你可以使用上面的函数来实现它。