49 lines
1.3 KiB
Haskell
49 lines
1.3 KiB
Haskell
-- 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...
|
|
--
|
|
-- By expanding this for the first four iterations, we get:
|
|
--
|
|
-- 1 + 1/2 = 3/2 = 1.5
|
|
-- 1 + 1/(2 + 1/2) = 7/5 = 1.4
|
|
-- 1 + 1/(2 + 1/(2 + 1/2)) = 17/12 = 1.41666...
|
|
-- 1 + 1/(2 + 1/(2 + 1/(2 + 1/2))) = 41/29 = 1.41379...
|
|
--
|
|
-- The next three expansions are 99/70, 239/169, and 577/408,
|
|
-- but the eighth expansion, 1393/985,
|
|
-- is the first example where the number of digits in the numerator exceeds
|
|
-- the number of digits in the denominator.
|
|
--
|
|
-- In the first one-thousand expansions,
|
|
-- how many fractions contain a numerator with more digits than denominator?
|
|
--
|
|
|
|
-- Thoughts :
|
|
-- 1 + 1/2 = 3/2
|
|
-- 1 + 1/(2 + 1/2) = 1 + 1/(5/2)
|
|
-- = 1 + 2/5
|
|
-- = 5 + 2 / 5
|
|
-- = 7/5
|
|
-- F_n = p/q
|
|
-- F_{n+1}
|
|
--
|
|
-- 1 + 1/( 1 + p/q ) = 1 + 1/( q+p / q)
|
|
-- = 1 + q / q+p
|
|
-- = 2q+p / q+p
|
|
--
|
|
|
|
next (p,q) = (2*q + p , p+q)
|
|
|
|
nb_digits n = length $ show n
|
|
|
|
digits 0 x = []
|
|
digits n x = y:(digits (n-1) y)
|
|
where y = next x
|
|
|
|
greater_numerator (p,q) = (nb_digits p) > (nb_digits q)
|
|
|
|
nb_greater_numerator n = length $ filter (greater_numerator) (digits n (1,1))
|
|
|
|
main = do
|
|
putStrLn $ show $ nb_greater_numerator 1000
|