RosettaCodeData/Task/Perfect-numbers/Perl/perfect-numbers-7.pl
2017-09-25 22:28:19 +02:00

10 lines
245 B
Perl

use ntheory qw(is_mersenne_prime valuation);
sub is_even_perfect {
my ($n) = @_;
my $v = valuation($n, 2) || return;
my $m = ($n >> $v);
($m & ($m + 1)) && return;
($m >> $v) == 1 || return;
is_mersenne_prime($v + 1);
}