diff --git a/64 b/64 new file mode 100755 index 0000000..a333abb Binary files /dev/null and b/64 differ diff --git a/64.hi b/64.hi new file mode 100644 index 0000000..063ea48 Binary files /dev/null and b/64.hi differ diff --git a/64.hs b/64.hs new file mode 100644 index 0000000..80b423f --- /dev/null +++ b/64.hs @@ -0,0 +1,16 @@ +next :: (Integer, Integer, Integer) -> (Integer, Integer, Integer) +next (a, b, n) = let nextA = (n - b * b) `div` a + nextB = nextA * ceiling((sqrt (fromIntegral n) + fromIntegral b) / fromIntegral nextA - 1) - b + in (nextA, nextB, n) + +hasOddPeriod :: Integer -> Bool +hasOddPeriod n = let sqrtn = floor . sqrt . fromIntegral $ n + initial = (1, sqrtn, n) + in if sqrtn * sqrtn == n + then False + else odd . (+1) . length $ takeWhile (initial /=) (tail $ iterate next initial) + +numOfOddPeriods :: Integer -> Int +numOfOddPeriods n = length $ filter (== True) $ map hasOddPeriod [2..n] + +main = print $ numOfOddPeriods 10000 diff --git a/64.o b/64.o new file mode 100644 index 0000000..306a808 Binary files /dev/null and b/64.o differ