RosettaCodeData/Task/Pells-equation/Langur/pells-equation.langur
2026-04-30 12:34:36 -04:00

31 lines
739 B
Text

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"
}