Pell's equation: Difference between revisions

Line 762:
y = 27,126,610,172,119,035,540,864,542,981,075,550,089,190,381,938,849,116,323,732,855,930,990,771,728,447,597,698,969,628,164,719,475,714,805,646,913,222,890,277,024,408,337,458,564,351,161,990,641,948,210,581,361,708,373,955,113,191,451,102,494,265,278,824,127,994,180
</pre>
 
=={{header|Nim}}==
{{trans|Python}}
{{libheader|bignum}}
<lang Nim>import math, strformat
import bignum
 
func solvePell(n: int): (Int, Int) =
let x = newInt(sqrt(n.toFloat).int)
var (y, z, r) = (x, newInt(1), x shl 1)
var (e1, e2) = (newInt(1), newInt(0))
var (f1, f2) = (newInt(0), newInt(1))
 
while true:
y = r * z - y
z = (n - y * y) div z
r = (x + y) div z
 
(e1, e2) = (e2, e1 + e2 * r)
(f1, f2) = (f2, f1 + f2 * r)
 
let (a, b) = (f2 * x + e2, f2)
if a * a - n * b * b == 1:
return (a, b)
 
for n in [61, 109, 181, 277]:
let (x, y) = solvePell(n)
echo &"x² - {n:3} * y² = 1 for (x, y) = ({x:>21}, {y:>19})"</lang>
 
{{out}}
<pre>x² - 61 * y² = 1 for (x, y) = ( 1766319049, 226153980)
x² - 109 * y² = 1 for (x, y) = ( 158070671986249, 15140424455100)
x² - 181 * y² = 1 for (x, y) = ( 2469645423824185801, 183567298683461940)
x² - 277 * y² = 1 for (x, y) = (159150073798980475849, 9562401173878027020)</pre>
 
=={{header|Perl}}==
Anonymous user