use strict; use warnings; use List::Util ; use ntheory qw; my $upto = 50; my @candidates; for my $p ( map { pn_primorial($_) } 1..2*$upto ) { push @candidates, first { is_prime($_ + $p) } 2..100*$upto; } my @fortunate = sort { $a <=> $b } uniq grep { is_prime $_ } @candidates; print "First $upto distinct fortunate numbers:\n" . (sprintf "@{['%6d' x $upto]}", @fortunate) =~ s/(.{60})/$1\n/gr;