Integer roots: Difference between revisions

Content added Content deleted
m (→‎{{header|Haskell}}: An earlier reversion reverted)
(→‎{{header|Phix}}: now uses mpz_root() instead)
Line 714: Line 714:
{{libheader|mpfr}}
{{libheader|mpfr}}
<lang Phix>include mpfr.e
<lang Phix>include mpfr.e

function integer_root(integer n, object A)
function integer_root(integer n, object a)
-- a must be integer or string
-- yields the nth root of A, adapted from https://en.wikipedia.org/wiki/Nth_root_algorithm
mpz res = mpz_init(1),
mpz res = mpz_init()
x = mpz_init(),
{} = mpz_root(res,mpz_init(a),n)
delta = mpz_init()
A = mpz_init(A)
while true do
mpz_set(x,A)
mpz_pow_ui(delta,res,n-1)
mpz_fdiv_q(x, x, delta)
mpz_sub(delta,x,res)
{} = mpz_fdiv_q_ui(delta, delta, n)
if mpz_cmp_si(delta,0)=0 then exit end if
mpz_add(res,res,delta)
end while
return mpz_get_str(res)
return mpz_get_str(res)
end function
end function
Line 743: Line 732:
3rd root of 8 = 2
3rd root of 8 = 2
3rd root of 9 = 2
3rd root of 9 = 2
First digits of the square root of 2: 1414213562373095048...7107578486024636008 (2001 digits)
First digits of the square root of 2: 14142135623730950488...47107578486024636008 (2,001 digits)
First digits of the cube root of 2: 1259921049894873164...2546828353183047061 (2001 digits)
First digits of the cube root of 2: 12599210498948731647...22546828353183047061 (2,001 digits)
</pre>
</pre>