Skip to content

Instantly share code, notes, and snippets.

Created January 12, 2013 21:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/4520506 to your computer and use it in GitHub Desktop.
Save anonymous/4520506 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
use warnings;
use strict;
use bignum;
$|=1;
my $p = $ARGV[0];
die "Usage: $0 number\n" if !$p;
my $number = ( 2**$p ) - 1;
printf "Testing 2^%s - 1 == %s\n", $p, $number;
my $divisor = find_divisor($number);
printf "2^%s - 1 is %s.\n", $p, ($divisor ? "divisible by $divisor" : 'prime');
exit;
sub find_divisor {
my $number = shift;
my $limit = sqrt($number);
my $divisor = 3;
my $passes = 0;
my $result;
while ($divisor <= $limit) {
$passes +=1;
if ($number % $divisor == 0) {
$result = $divisor;
last;
}
$divisor +=2;
print "\x0d".$passes if $passes % 1000 == 0;
}
print "\x0d".$passes." passes\n";
return $result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment