Project Euler 解答

Project Euler Problem 064

Project Euler Problem 064

fi :: Integer -> Double fi = fromIntegral frac :: Integer -> [Integer] frac x = imp 0 1 [] [] where sqrtx :: Double sqrtx = sqrt $ fi x tai :: Integer -> Integer -> Integer tai m n= floor $ (sqrtx + fi m)/(fi n) --帯分数にしたときの整数お取り出し imp :: Integer -> Integer -> [(Integer,Integer)] -> [Integer] -> [Integer] imp m n acc ans | (m,n) `elem` acc = ans imp m n acc ans = imp m' n' ((m,n):acc) (ans++[a]) where a = tai m n m' = -(m - n*a) --ここがバグってた。最終的にマイナスしてるんだからマイナスをつけた --n' = x - m'*m'`quot`n --ゼロ除算エラー。なぜ? -> 平方数のときにゼロ除算 n' = if n/= 0 then (x - m'*m')`quot`n else x-m'*m' --ゼロ除算があったので回避 ans1 :: Int ans1 = length [r| i<-[1..10000],let r = frac i,even $ length r] --1322 ok -- 1322 main :: IO () main = print ans1

since 2013