我是Haskell的新手,嘗試從http://projecteuler.net/解決3個問題。haskell中的項目euler問題3
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
我得到錯誤例外:前奏曲。最大值:空列表爲什麼?
謝謝@Barry布朗,我想我必須使用:
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
謝謝。
哪個版本的Haskell?也就是說,你在使用哪種環境?有些不支持任意精度整數。 –
我使用ghc-7.0.3 – 0xAX
任意精度整數實際上是Haskell語言的一部分,所以不是這樣。沒有Haskell實現可以忽略它們。 –