Lucas-Lehmer test: Difference between revisions

→‎{{header|Perl}}: add Perl 6 entry
(→‎{{header|Perl}}: add Perl 6 entry)
Line 611:
}
last if $count >= $upb_count;
}</lang>
=={{header|Perl 6}}==
{{trans|Perl 5}}
 
{{works with|Rakudo Star|2010.08}}
 
Precision limited to 18 because rakudo does not yet implement arbitrary precision Int as specced.
<lang perl6>multi is_prime(Int $p where ($p <= 1)) { False }
multi is_prime(Int $p) { $p %% none(2,(3,5...sqrt($p))) }
 
multi is_mersenne_prime(2) { True }
multi is_mersenne_prime(Int $p) {
my $m_p = 2 ** $p - 1;
my $s = 4;
$s = ($s ** 2 - 2) % $m_p for 3 .. $p;
$s == 0;
}
 
my $precision = 18; # maximum requested number of decimal places of 2 ** MP-1
my $long_bits_width = $precision / log(2) * log(10);
my $max_prime = floor(($long_bits_width - 1)/2);
my $max_count = 45;
 
say " Finding Mersenne primes in M[2..$max_prime]:";
 
my $count = 0;
for 2 .. $max_prime -> $p {
if is_prime($p) && is_mersenne_prime($p) {
say "M$p";
last if ++$count >= $max_count;
}
}</lang>
 
Anonymous user