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 number string with commas var .neg, .s = "", string .x if .s[1] == '-' { .neg, .s = "-", rest .s } .neg ~ join ",", split -3, .s } for .n in [61, 109, 181, 277, 8941] { val .x, .y = .solvePell(.n) writeln $"x² - \.n;y² = 1 for:\n\tx = \.x:.C;\n\ty = \.y:.C;\n" }