Pell's equation: Difference between revisions
Content added Content deleted
Langurmonkey (talk | contribs) |
Langurmonkey (talk | contribs) |
||
Line 1,070: | Line 1,070: | ||
=={{header|langur}}== |
=={{header|langur}}== |
||
{{trans|D}} |
{{trans|D}} |
||
<syntaxhighlight lang="langur"> |
<syntaxhighlight lang="langur"> |
||
val fun = fn a, b, c: [b, b * c + a] |
|||
val |
val solvePell = fn(n) { |
||
val |
val x = trunc(n ^/ 2) |
||
var |
var y, z, r = x, 1, x * 2 |
||
var |
var e1, e2, f1, f2 = 1, 0, 0, 1 |
||
for { |
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 |
val b, a = fun(e2, f2, x) |
||
if |
if a^2 - n * b^2 == 1: return [a, b] |
||
} |
} |
||
} |
} |
||
val |
val C = fn(x) { |
||
# format number string with commas |
# format number string with commas |
||
var |
var neg, s = "", x -> string |
||
if |
if s[1] == '-' { |
||
neg, s = "-", s -> rest |
|||
} |
} |
||
neg ~ join(",", split(-3, s)) |
|||
} |
} |
||
for |
for n in [61, 109, 181, 277, 8941] { |
||
val |
val x, y = solvePell(n) |
||
writeln "x² - {{ |
writeln "x² - {{n}}y² = 1 for:\n\tx = {{x:fn C}}\n\ty = {{y:fn C}}\n" |
||
} |
} |
||
</syntaxhighlight> |
</syntaxhighlight> |