diff --git a/Problem055.hs b/Problem055.hs new file mode 100644 index 0000000..d633c61 --- /dev/null +++ b/Problem055.hs @@ -0,0 +1,13 @@ +-- A number that never forms a palindrome through the reverse and add process is called a Lychrel number. Due to the theoretical +-- nature of these numbers, and for the purpose of this problem, we shall assume that a number is Lychrel until proven otherwise. +-- In addition you are given that for every number below ten-thousand, it will either (i) become a palindrome in less than fifty +-- iterations, or, (ii) no one, with all the computing power that exists, has managed so far to map it to a palindrome. +-- +-- How many Lychrel numbers are there below ten-thousand? + +import Euler + +step n = n + fromDigits (reverse $ toDigits n :: [Word8]) +palindrome n = let ds = toDigits n :: [Word8] in ds == reverse ds +lychrel n = not $ any palindrome $ take 50 $ iterate step (step n) +main = print $ length $ filter lychrel [1..10000] diff --git a/Problem056.hs b/Problem056.hs new file mode 100644 index 0000000..5adac16 --- /dev/null +++ b/Problem056.hs @@ -0,0 +1,3 @@ +-- Considering natural numbers of the form, ab, where a, b < 100, what is the maximum digital sum? +import Euler +main = print $ maximum $ [ sum (toDigits (a^b) :: [Integer]) | a <- [1..100], b <- [1..100] ] diff --git a/Problem057.hs b/Problem057.hs new file mode 100644 index 0000000..1390f6c --- /dev/null +++ b/Problem057.hs @@ -0,0 +1,14 @@ +-- It is possible to show that the square root of two can be expressed as an infinite continued fraction. +-- +-- √ 2 = 1 + 1/(2 + 1/(2 + 1/(2 + ... ))) = 1.414213... +-- +-- In the first one-thousand expansions, how many fractions contain a numerator with more digits than denominator? +import Euler +import Data.Ratio + +nDigits 0 = 0 +nDigits n = 1 + nDigits (n `div` 10) + +iterations = iterate (\x -> 1+1/(1+x)) (3%2) + +main = print $ length $ filter (\x -> nDigits (numerator x) > nDigits (denominator x)) $ take 1000 iterations diff --git a/Problem058.hs b/Problem058.hs new file mode 100644 index 0000000..f5218ae --- /dev/null +++ b/Problem058.hs @@ -0,0 +1,28 @@ +-- Starting with 1 and spiralling anticlockwise in the following way, a square spiral with side length 7 is formed. +-- +-- 37 36 35 34 33 32 31 +-- 38 17 16 15 14 13 30 +-- 39 18 5 4 3 12 29 +-- 40 19 6 1 2 11 28 +-- 41 20 7 8 9 10 27 +-- 42 21 22 23 24 25 26 +-- 43 44 45 46 47 48 49 +-- +-- It is interesting to note that the odd squares lie along the bottom right diagonal, but what is more interesting is that 8 out +-- of the 13 numbers lying along both diagonals are prime; that is, a ratio of 8/13 ≈ 62%. +-- +-- If one complete new layer is wrapped around the spiral above, a square spiral with side length 9 will be formed. If this process +-- is continued, what is the side length of the square spiral for which the ratio of primes along both diagonals first falls below +-- 10%? +module Main where + +import Euler + +isPrime n = n >= 2 && not (any (\p -> n `mod` p == 0) $ takeWhile ((<= n) . (^2)) primes) + +-- diagonals of an m by m spiral; m = 2*n + 1. +allDiags = 1 : zipWith (+) allDiags (concat $ map (replicate 4) [2,4..]) +allDiags' = map isPrime allDiags +diags' n = take (4*n+1) allDiags' + +main = print $ head $ [ 2*n+1 | n <- [1..], (length (filter id (diags' n)) % (4*n+1)) < (1 % 10) ]