Perfect totient numbers: Difference between revisions
Content added Content deleted
m (→{{header|Sidef}}: added zkl header) |
(→{{header|zkl}}: added code) |
||
Line 160: | Line 160: | ||
=={{header|zkl}}== |
=={{header|zkl}}== |
||
<lang zkl>var totients=List.createLong(10_000,0); // cache |
|||
⚫ | |||
fcn totient(n){ if(phi:=totients[n]) return(phi); |
|||
<lang zkl></lang> |
|||
totients[n]=[1..n].reduce('wrap(p,k){ p + (n.gcd(k)==1) }) |
|||
} |
|||
fcn perfectTotientW{ // -->iterator |
|||
(1).walker(*).tweak(fcn(z){ |
|||
parts,n := 0,z; |
|||
while(n!=1){ parts+=( n=totient(n) ) } |
|||
if(parts==z) z else Void.Skip; |
|||
}) |
|||
⚫ | |||
<lang zkl>perfectTotientW().walk(20).println();</lang> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
L(3,9,15,27,39,81,111,183,243,255,327,363,471,729,2187,2199,3063,4359,4375,5571) |
|||
</pre> |
</pre> |