Add solutions for problems 55-58.
This commit is contained in:
parent
44f52663a9
commit
9378a772f4
|
|
@ -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]
|
||||
|
|
@ -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] ]
|
||||
|
|
@ -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
|
||||
|
|
@ -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) ]
|
||||
Loading…
Reference in New Issue