RosettaCodeData/Task/Parallel-calculations/Perl/parallel-calculations.pl

20 lines
596 B
Perl

use ntheory qw/factor vecmax/;
use threads;
use threads::shared;
my @results :shared;
my $tnum = 0;
$_->join() for
map { threads->create('tfactor', $tnum++, $_) }
(qw/576460752303423487 576460752303423487 576460752303423487 112272537195293
115284584522153 115280098190773 115797840077099 112582718962171 299866111963290359/);
my $lmf = vecmax( map { $_->[1] } @results );
print "Largest minimal factor of $lmf found in:\n";
print " $_->[0] = [@$_[1..$#$_]]\n" for grep { $_->[1] == $lmf } @results;
sub tfactor {
my($tnum, $n) = @_;
push @results, shared_clone([$n, factor($n)]);
}