Euler problems/11 to 20
Revision as of 13:53, 28 March 2007
What is the greatest product of four numbers on the same straight line in the 20 by 20 grid?
problem_11 = undefined
What is the first triangle number to have over five-hundred divisors?
problem_12 = head $ filter ((> 500) . nDivisors) triangleNumbers where triangleNumbers = scanl1 (+) [1..] nDivisors n = product $ map ((+1) . length) (group (primeFactors n)) primes = 2 : filter ((== 1) . length . primeFactors) [3,5..] primeFactors n = factor n primes where factor n (p:ps) | p*p > n = [n] | n `mod` p == 0 = p : factor (n `div` p) (p:ps) | otherwise = factor n ps
Find the first ten digits of the sum of one-hundred 50-digit numbers.
nums = ... -- put the numbers in a list problem_13 = take 10 . show . sum $ nums
Find the longest sequence using a starting number under one million.
problem_14 = undefined
Starting in the top left corner in a 20 by 20 grid, how many routes are there to the bottom right corner?
problem_15 = undefined
What is the sum of the digits of the number 21000?
dsum 0 = 0 dsum n = let ( d, m ) = n `divMod` 10 in m + ( dsum d ) problem_16 = dsum ( 2^1000 )
How many letters would be needed to write all the numbers in words from 1 to 1000?
problem_17 = undefined
Find the maximum sum travelling from the top of the triangle to the base.
problem_18 = undefined
How many Sundays fell on the first of the month during the twentieth century?
problem_19 = undefined
10 Problem 20
Find the sum of digits in 100!
problem_20 = let fac n = product [1..n] in foldr ((+) . Data.Char.digitToInt) 0 $ show $ fac 100
Alternate solution, summing digits directly, which is faster than the show, digitToInt route.
dsum 0 = 0 dsum n = let ( d, m ) = n `divMod` 10 in m + ( dsum d ) problem_20' = dsum . product $ [ 1 .. 100 ]