Skip to content

Instantly share code, notes, and snippets.

@zard1989
Created November 29, 2009 13:12
Show Gist options
  • Select an option

  • Save zard1989/244900 to your computer and use it in GitHub Desktop.

Select an option

Save zard1989/244900 to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
use strict;
print $_,$/ for prime_generator(1000);
sub prime_generator {
my $limit = shift;
return (2) if $limit <= 2;
my @nums;
for (1..$limit) {
$nums[$_] = 1;
}
@nums[0,1] = (0, 0);
my $prime = 2;
SIEVE:
while (1) {
my $picker = $prime + $prime;
while ($picker <= $limit) {
$nums[$picker] = 0;
$picker += $prime;
}
for ($prime+1..$limit) {
if ($nums[$_] == 1) {
$prime = $_;
next SIEVE;
}
else {
last SIEVE;
}
}
}
return grep { $nums[$_] } 1..$limit;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment