val fun = fn(a, b, c) { [b, b * c + a] } val solvePell = fn(n) { val x = trunc(n ^/ 2) var y, z, r = x, 1, x * 2 var e1, e2, f1, f2 = 1, 0, 0, 1 for { y = r * z - y z = (n - y * y) \ z r = (x + y) \ z e1, e2 = fun(e1, e2, r) f1, f2 = fun(f1, f2, r) val b, a = fun(e2, f2, x) if a^2 - n * b^2 == 1: return [a, b] } } val C = fn(x) { # format integer string with commas var neg, s = "", x -> string if s[1] == '-' { neg, s = "-", less(s, of=1) } neg ~ join(split(s, delim=-3), delim=",") } for n in [61, 109, 181, 277, 8941] { val x, y = solvePell(n) writeln "x² - {{n}}y² = 1 for:\n\tx = {{x:fn C}}\n\ty = {{y:fn C}}\n" }