Project euler problem 3 in haskell -
i'm new in haskell , try solve 3 problem http://projecteuler.net/.
the prime factors of 13195 5, 7, 13 , 29. largest prime factor of number 600851475143 ?
my solution:
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 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
i try run example:
getd 13195 > 29
but when try:
getd 600851475143
i error exception: prelude.maximum: empty list why?
thank @barry brown, think must use:
getd :: integer -> integer
but error:
couldn't match expected type `int' actual type `integer' expected type: [int] actual type: [integer] in second argument of `filter', namely `derivelist' in expression: filter issimplenumber derivelist
thank you.
your type signature limits integer values 2^29. try changing int
integer
.
edit:
i see realised need use integer instead of int. need change types of both getd , issimplenumber otherwise type mismatch.
also in general, if having trouble types, remove type declarations , let haskell tell correct types.
main> :t getd getd :: integral => -> main> :t issimplenumber issimplenumber :: integral => -> bool
Comments
Post a Comment