(phixonline)-->
with javascript_semantics
function sum_digits(integer n, base=10)
integer res = 0
while n do
res += remainder(n,base)
n = floor(n/base)
end while
return res
end function
function smith(integer n)
sequence p = prime_factors(n,true,-1)
if length(p)=1 then return false end if
integer sp = sum(apply(p,sum_digits)),
sn = sum_digits(n)
return sn=sp
end function
sequence s = apply(filter(tagset(10000),smith),sprint)
printf(1,"%d smith numbers found: %s\n",{length(s),join(shorten(s,"",8),", ")})