diff --git a/66 b/66 new file mode 100755 index 0000000..c9c2988 Binary files /dev/null and b/66 differ diff --git a/66.hi b/66.hi new file mode 100644 index 0000000..a7a46d3 Binary files /dev/null and b/66.hi differ diff --git a/66.hs b/66.hs new file mode 100644 index 0000000..bd07338 --- /dev/null +++ b/66.hs @@ -0,0 +1,26 @@ +import Data.List + +nextX :: (Integer, Integer, Integer, Integer, Integer) -> + (Integer, Integer, Integer, Integer, Integer) -> + Integer -> Integer +nextX (n'', d'', c'', a'', b'') + (n' , d' , c' , a' , b' ) + q = if n * n - q * d * d == 1 + then n + else nextX (n', d', c', a', b') (n, d, c, a, b) q + where a = (q - b' * b') `div` a' + c = ceiling((sqrt (fromIntegral q) + fromIntegral b') / fromIntegral a - 1) + b = a * c - b' + d = c * d' + d'' + n = c * n' + n'' + + +minX :: Integer -> Integer +minX q = let sqrtQ = floor . sqrt . fromIntegral $ q + in if sqrtQ * sqrtQ == q + then 0 + else nextX (1, 0, 0, 0, 0) (sqrtQ, 1, sqrtQ, 1, sqrtQ) q + +main = print $ let mapping = map minX [1..1000] + max = maximum mapping + in fmap (+1) $ elemIndex max mapping diff --git a/66.o b/66.o new file mode 100644 index 0000000..6f30d0f Binary files /dev/null and b/66.o differ