Integer roots
func root(a, b) {
b < 2 && return(b)
var (a1, c) = (a-1, 1)
var f = {|x| (a1*x + b//(x**a1)) // a }
var d = f(c)
var e = f(d)
while (c !~ [d, e]) {
(c, d, e) = (d, e, f(e))
}
[d, e].min
}
say "First 2,001 digits of the square root of two:"
say root(2, 2 * 100**2000)
Output:
First 2,001 digits of the square root of two:
14142135623730950488016887242096980[...]32952546758516447107578486024636008