1
我試圖計算前20個素數有他們之間的2號空缺 - EG 3和5如何計算兩個邊界之間的素數雙胞胎?
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
,則輸出爲3, 5, ,5, 5, 5, 5, 7, 7, 7, 7, 7, 9, 7, 7, 7, 7, 9, 9, 9..
等這顯然是由於if語句。我怎樣才能打印出多少孿生素數之間有一定的數字沒有重複?
9不是素數... – sinelaw
另請參閱['zip'](http://hackage.haskell.org/package/base-4.8.1.0/docs/Data-List.html# v:zip) - 你可以這樣做:'areTwoApart(x,y)= x - y == 2'以及類似於'filter areTwoApart(zip allprimes(tail allprimes))'的方法來更接近你想要的東西。 – sinelaw
對不起,在我最後的評論中,它應該是'y - x'而不是相反。 – sinelaw