-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathproblems1-10.hs
39 lines (28 loc) · 1.27 KB
/
problems1-10.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import Data.Char
import Math.NumberTheory.Primes (primes)
primesUnlimited = primes
primesToLimit m = takeWhile (<=m) primes
problem1 = sum [x| x<-[1..999], x `mod` 3 == 0 || x `mod` 5 == 0]
problem2 = sum [x | x <-takeWhile (<4000000) $ map fib [1..], even x]
where fib :: Int -> Integer
fib = (map fib_base [0 ..] !!)
fib_base 0 = 1
fib_base 1 = 1
fib_base n = fib (n-2) + fib (n-1)
problem3 = maximum $ primeFactors 600851475143
where primeFactors n = [x| x<-(primesToLimit $ floor $ sqrt (fromIntegral n)), n `mod` x == 0]
problem4 = maximum $ [a*b| a<-[100..999], b<-[a..999], (reverse $ show (a*b) ) == (show (a*b))]
problem5 = foldr1 lcm [1..20]
problem6 = (sum [1..100])^2 - sum ( map (^2) [1..100] )
problem7 = primesToLimit 500000 !! 10000
problem8 = do
inFile <- readFile "data/p8.dat"
let number = read inFile :: Integer
let productsList = findProducts (show number)
print $ maximum productsList
where
findProducts :: String -> [Int]
findProducts [] = []
findProducts x = [product $ map digitToInt $ take 5 x ] ++ (findProducts (tail x))
problem9 = product $ head [ [a,b,c] | c<-[1..1000], b<-[1..(1000-c-1)], a<-[1000-c-b], a^2 + b^2 == c^2 ]
problem10 = sum $ primesToLimit 2000000