Pell's equation: Difference between revisions

Content added Content deleted
(→‎{{header|Haskell}}: added solution)
Line 436: Line 436:
x^2 - 277*y^2 = 1 for x = 159150073798980475849 and y = 9562401173878027020
x^2 - 277*y^2 = 1 for x = 159150073798980475849 and y = 9562401173878027020
</pre>
</pre>

=={{header|Haskell}}==
{{trans|C#}}
<lang haskell>pell :: Integral a => a -> (a, a)
pell n = go (x, 1, x * 2, 1, 0, 0, 1)
where
x = floor $ sqrt $ fromIntegral n
go (y, z, r, e1, e2, f1, f2) =
let y' = r * z - y
z' = (n - y' * y') `div` z
r' = (x + y') `div` z'
(e1', e2') = (e2, e2 * r' + e1)
(f1', f2') = (f2, f2 * r' + f1)
(a, b) = (f2', e2')
(b', a') = (a, a * x + b)
in if a' * a' - n * b' * b' == 1
then (a', b')
else go (y', z', r', e1', e2', f1', f2')</lang>

<pre>λ> mapM_ print $ pell <$> [61,109,181,277]
(1766319049,226153980)
(158070671986249,15140424455100)
(2469645423824185801,183567298683461940)
(159150073798980475849,9562401173878027020)</pre>


=={{header|J}}==
=={{header|J}}==