31 lines
739 B
Text
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"
|
|
}
|