Perfect numbers: Difference between revisions

Content added Content deleted
No edit summary
(→‎{{header|Perl 6}}: Add a much faster variation)
Line 2,129: Line 2,129:


=={{header|Perl 6}}==
=={{header|Perl 6}}==
Naive (very slow) version
<lang perl6>sub is-perf($n) { $n == [+] grep $n %% *, 1 .. $n div 2 }
<lang perl6>sub is-perf($n) { $n == [+] grep $n %% *, 1 .. $n div 2 }


# used as
# used as
put (grep {.&is-perf}, 1..Inf)[^4];</lang>
put ((1..Inf).hyper.grep: {.&is-perf})[^4];</lang>
{{out}}
{{out}}
<pre>6 28 496 8128</pre>
<pre>6 28 496 8128</pre>
Much, much faster version:
<lang perl6>my @primes = lazy 2,3,*+2 … Inf;
my @perfects = lazy gather for @primes {
my $n = 2**$_ - 1;
take $n * 2**($_ - 1) if $n.is-prime;
}

.put for @perfects[^12];</lang>

{{out}}
<pre>6
28
496
8128
33550336
8589869056
137438691328
2305843008139952128
2658455991569831744654692615953842176
191561942608236107294793378084303638130997321548169216
13164036458569648337239753460458722910223472318386943117783728128
14474011154664524427946373126085988481573677491474835889066354349131199152128</pre>


=={{header|Phix}}==
=={{header|Phix}}==