Lucas-Lehmer test: Difference between revisions

Content deleted Content added
m →‎{{header|Tcl}}: minor correction
Line 370:
 
=={{header|Perl}}==
Perl's <code>Math::BigInt</code> core module is a class that implements arbitrary-precision integers.
<lang perl>use Math::BigInt;
 
Here we use the <code>bigint</code> pragma to transparently have number constants and operations be bigints:
sub is_prime {
<lang perl>usesub Math::BigInt;is_prime {
my $p = shift;
if ($p == 2) {
Line 388 ⟶ 389:
 
sub is_mersenne_prime {
use bigint;
my $p = shift;
if ($p == 2) {
return 1;
} else {
my $m_p = Math::BigInt->bone->blsft(2 ** $p) ->bsub( 1);
my $s = Math::BigInt->new(4);
foreach my $i (3 .. $p) {
$s = $s->bmul($s) ** 2 ->bsub( 2)->bmod( % $m_p);
}
return $s->is_zero == 0;
}
}