2016-05-04 18 views
2

を見つける - と述べた範囲内のすべての素数を計算する:は、整数の範囲を与えられた私は素数のリストを見つけたい素数のリスト

primesR :: Integral a => a -> a -> [a] 
primesR a b | even a = filter isPrime [a+1,a+3..b-1] 
      | True = filter isPrime [a,a+2..b] 

奇数の一部を介してフィルタリングするための直感的なようですリストと残りは残っていますが、正しい結果が得られません。正しく実行するにはこのコードを変更できますか?

+1

この機能が期待どおりに機能しない例を挙げることができますか? – ErikR

答えて

3

正しい解決策は次のとおりです。

primesR :: Integral a => a -> a -> [a] 
primesR a b | even a = filter isPrime [a+1,a+3..b] 
      | True = filter isPrime [a,a+2..b] 

あなたが誤ってeven a = filter isPrime [a+1,a+3..b-1]を持っていました。それは間違っている。あなたはリストの終わりまでのすべての方法を繰り返す必要があります。

関連する問題