35 lines
996 B
Text
35 lines
996 B
Text
with javascript_semantics
|
|
requires("1.0.0") -- mpz_pollard_rho
|
|
include mpfr.e
|
|
|
|
procedure test(integer n)
|
|
string s = sprintf("%d",n), lastp = ""
|
|
sequence res = {s}
|
|
atom t0 = time()
|
|
while true do
|
|
s = substitute(s,"_","")
|
|
sequence rr = mpz_pollard_rho(s,true)
|
|
if length(rr)=1 then exit end if
|
|
s = join(rr,"_")
|
|
res = append(res,s)
|
|
end while
|
|
atom t = time()-t0
|
|
integer niter = length(res)-1
|
|
string iter = iff(niter>1?sprintf("(%d)",niter):""),
|
|
e = iff(t>0.1?" ["&elapsed(t)&"]":"")
|
|
s = sprintf("HP%d%s = ",{n,iter})
|
|
if niter=0 then
|
|
printf(1,"%s%d %s\n",{s,n,e})
|
|
else
|
|
for i=2 to niter do
|
|
niter -= 1
|
|
printf(1,"%sHP%s(%d)\n",{s,res[i],niter})
|
|
if i=2 then
|
|
s = repeat(' ',length(s))
|
|
s[-2] = '='
|
|
end if
|
|
end for
|
|
printf(1,"%s%s %s\n",{s,res[$],e})
|
|
end if
|
|
end procedure
|
|
papply(tagset(20,2)&65,test)
|