Jump to content

Pell's equation: Difference between revisions

 
Line 1,070:
=={{header|langur}}==
{{trans|D}}
<syntaxhighlight lang="langur">val .fun = fn .a, .b, .c: [.b, .b * .c + .a]
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 -> string
if .s[1] == '-' {
.neg, .s = "-", rest .s -> rest
}
.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:fn C}}\n\ty = {{.y:fn C}}\n"
}
</syntaxhighlight>
1,007

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.