SPUG: Primes
Fred Morris
m3047 at inwa.net
Sat Oct 6 01:00:22 PDT 2007
Somebody told me this wasn't math, just accounting. But I can't seem to find
it exactly described in the literature. Have fun. Let me know.
#!/usr/bin/perl
# Expects -p:max-to-test where max-to-test is an integer.
use Getopt::Std;
use vars '$opt_p';
use strict;
# Annoying hidden voodoo.
getopts('p:');
($opt_p =~ m/^\d+$/) or die 'p must be an unsigned decimal integer';
my $i = 2; # First possible value.
my %numbers;
sub next_number($$) {
my $i = shift;
my $k = shift;
my $next_i = $i + $k;
if (exists $numbers{$next_i}) {
push @{$numbers{$next_i}}, $k;
}
else {
$numbers{$next_i} = [$k];
}
return;
}
while ($i < $opt_p) {
if (exists $numbers{$i}) {
map next_number($i,$_), @{$numbers{$i}};
delete $numbers{$i};
}
else {
printf "%8d\n", $i;
next_number($i,$i);
}
$i += 1;
}
exit(0);
More information about the spug-list
mailing list