Integer roots: Difference between revisions

Content added Content deleted
Line 25: Line 25:
Uses GNU GMP library
Uses GNU GMP library
<lang zkl>var [const] BN=Import("zklBigNum");
<lang zkl>var [const] BN=Import("zklBigNum");
fcn root(n,r){ rm1:=r-1;
fcn root(n,r){
f:='wrap(z){ (n/z.pow(r-1) + z*(r-1))/r or 1 }; //--> v or 1
c:=1;
(d:=(n/c.pow(rm1) + c*rm1)/r) : if(_==0) d=1;;
c,d,e:=1,f(c),f(d);
(e:=(n/d.pow(rm1) + d*rm1)/r) : if(_==0) e=1;;
while(c!=d and c!=e){ c,d,e=d,e,f(e) }
if(d<e) d else e
while(c!=d and c!=e){ c,d,e=d,e,(n/e.pow(rm1) + e*rm1)/r }
if(d<e) d else e
}</lang>
}</lang>
<lang zkl>a:=BN(100).pow(2000)*2;
<lang zkl>a:=BN(100).pow(2000)*2;