双子の素数
30分プログラム、その124。ふと思いついたので、双子の素数を求めてみる。ついでに4つ子の素数も。3つ子は、一個しかないらしいのでパス。
使い方
*Main> take 10 primes [2,3,5,7,11,13,17,19,23,29] *Main> take 5 $ twin primes [(3,5),(5,7),(11,13),(17,19),(29,31)] *Main> take 5 $ quad primes [(5,7,11,13),(11,13,17,19),(101,103,107,109),(191,193,197,199),(821,823,827,829)]
ソースコード
sieve (x:xs) = x:sieve [y | y <- xs, y `mod` x /= 0] primes = sieve [2..] twin (p1:pss@(p2:_)) = if p1 + 2 == p2 then (p1,p2):twin pss else twin pss quad (p1:pss@(p2:p3:p4:_)) = if p2 == p1+2 && p3 == p1+6 && p4 == p1 + 8 then (p1,p2,p3,p4):quad pss else quad pss