Perfect totient numbers: Difference between revisions

m (→‎{{header|Sidef}}: added zkl header)
(→‎{{header|zkl}}: added code)
Line 160:
 
=={{header|zkl}}==
<lang zkl>var totients=List.createLong(10_000,0); // cache
<lang zkl></lang>
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>}</lang>
<lang zkl>perfectTotientW().walk(20).println();</lang>
{{out}}
<pre>
L(3,9,15,27,39,81,111,183,243,255,327,363,471,729,2187,2199,3063,4359,4375,5571)
</pre>
Anonymous user