log.saiias

あてにならない備忘録

ProjectEuler Problem1-3

Haskellを勉強するために前々から解こうと思ったまま放置していたProjectEulerを解くことにした。

Problem1

やるだけ

sum [x|x<-[1 .. 999],x `mod` 3 == 0, x `mod` 5 == 0]

Problem2

これもやるだけ

problem2::Integer
problem2 =sum[x | x <- takeWhile (< 4000000) fib, even x]
    where fib = 1:2:[x + y | (x, y) <- zip fib (tail fib)]

main = do
  print problem2

Problem3

これも(ry

myfactor::Integer ->[Integer]->[Integer]
myfactor n (x:xs) | n<x^2 = [n]
                  |mod n x == 0 = x:myfactor (n `div` x) (x:xs)
                  |otherwise = myfactor n xs

problem3::Integer->Integer
problem3 n = maximum $ myfactor n (2:[3,5..])
           
main = do
  print $ problem3 600851475143