私はHaskellで新しく、http://projecteuler.net/から3つの問題を解決しようとしています。プロジェクトオイラー問題3 in haskell
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
私のソリューション:
import Data.List
getD :: Int -> Int
getD x =
-- find deviders
let deriveList = filter (\y -> (x `mod` y) == 0) [1 .. x]
filteredList = filter isSimpleNumber deriveList
in maximum filteredList
-- Check is nmber simple
isSimpleNumber :: Int -> Bool
isSimpleNumber x = let deriveList = map (\y -> (x `mod` y)) [1 .. x]
filterLength = length (filter (\z -> z == 0) deriveList)
in
case filterLength of
2 -> True
_ -> False
は、私は、たとえば実行しよう:
getD 13195
> 29
しかし、私は試してみてください。
getD 600851475143
私はエラー例外を取得:前奏曲を。最大:空リストなぜですか?
getD :: Integer -> Integer
しかし、私はエラーを取得:
Couldn't match expected type `Int' with actual type `Integer'
Expected type: [Int]
Actual type: [Integer]
In the second argument of `filter', namely `deriveList'
In the expression: filter isSimpleNumber deriveList
はありがとう
は@Barryブラウンは、私は私が使用しなければならないと思います、ありがとうございました。
どのバージョンのHaskellですか?つまり、あなたはどの環境を使用していますか?いくつかは任意の精度整数をサポートしていません。 –
私はghc-7.0.3を使用します – 0xAX
任意精度の整数は実際にはハスケル言語の一部ですので、そうではありません。それらを省略したHaskellの実装はありません。 –