2011-10-19 14 views
1

私はハスケルの初心者です。Project Euler Problem 10と問題があります。ここで私が持っているものだ:私はこれを実行するとハスケルのプロジェクトオイラー番号10、バグを見つけることができません

primes :: Integral a => [a] 
primes = filter isPrime [1,3..] 

isPrime :: Integral a => a -> Bool 
isPrime 1 = False 
isPrime n = not $ any isDivisibleBy [2..maxTry] 
    where isDivisibleBy x = n `mod` x == 0 
      maxTry = floor $ sqrt $ fromIntegral n 

solution :: Integral a => a 
solution = sum $ takeWhile (<2000000) primes 

main = putStrLn $ show solution 

、私は142913828920.プロジェクトオイラーはそれが間違っていると言っている取得します。これは問題No.7のprimesisPrimeに同じ定義をうまく使用していたため、私はうんざりです。これは10001番目の素数を見つけることでした。助けて?

答えて

5

2が素数であるので、私はライン

primes = filter isPrime [1,3..] 

に質問です。

+2

あなたが[世界で最もエリートなハッカー]でない限り、1は素数ではありません(http://www.imdb.com/title/tt0298814/goofs) – hugomg

+0

私はisPrimeが1を除外することを望みます。 2は明示的に除外されていますが理解できません。そして、私はそれが問題だと確信しています... –

+0

ああ、私はその明示的なチェックを逃していました。私は彼がどのように正しく10001プライムを得たのだろうか。 – hugomg

関連する問題