RosettaCodeData/Task/Home-primes/Phix/home-primes.phix
2026-02-01 16:33:20 -08:00

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)