use warnings; use strict; use feature 'say'; use MCE::Flow; sub collatz { my ($n) = @_; my @seq = $n; while ( $n != 1 ) { $n = $n % 2 ? 3 * $n + 1 : $n / 2; push @seq, $n; } return @seq; } my @sizes; mce_flow_s { max_workers => MCE::Util::get_ncpu(), bounds_only => 1, gather => \@sizes, }, sub { my ($start, $end) = @{ $_[1] }; my @chunk_sizes; push @chunk_sizes, [ $_, scalar collatz($_) ] for $start .. $end; MCE->gather( @chunk_sizes ); }, 1, 1e6; MCE::Flow->finish; say "@$_" for reverse +(sort { $b->[1] <=> $a->[1] } @sizes)[0..19];