Smith numbers: Difference between revisions

→‎{{header|Phix}}: prime_factors() builtin has been updated, plus use of filter() and shorten()
m (Fix Perl 6 -> Raku links)
(→‎{{header|Phix}}: prime_factors() builtin has been updated, plus use of filter() and shorten())
Line 2,466:
 
=={{header|Phix}}==
Requires 0.8.2+
Note that the builtin prime_factors(4) yields {2}, rather than {2,2}, hence the inner loop (admittedly repeat..until style would be better, if only Phix had that).
<lang Phix>function sum_digits(integer n, integer base=10)
integer res = 0
while n do
res += remainder(n,base)
Line 2,475:
return res
end function
 
function smith(integer n)
sequence p = prime_factors(n,true)
if smithlength(ip)=1 then s &=return ifalse end if
integer sp = 0, w = n
forinteger sp i=1 to lengthsum(apply(p,sum_digits) do),
integer pi sn = p[i],sum_digits(n)
return sum_digits(n)sn=sp
spi = sum_digits(pi)
while mod(w,pi)=0 do
sp += spi
w = floor(w/pi)
end while
end for
return sum_digits(n)=sp
end function
 
sequence s = {}filter(tagset(10000),smith)
?shorten(s,"numbers",7)</lang>
for i=1 to 10000 do
if smith(i) then s &= i end if
end for
?length(s)
s[8..-8] = {"..."}
?s</lang>
<pre>
{4,22,27,58,85,94,121,"...",9880,9895,9924,9942,9968,9975,9985," (376 numbers)"}
376
{4,22,27,58,85,94,121,"...",9880,9895,9924,9942,9968,9975,9985}
</pre>
 
7,815

edits