#!/usr/local/bin/perl -w # $limit = shift or die "No limit supplied\n"; die "Limit is not integer\n" unless $limit =~ /^\d+$/; $sqrtLimit = sqrt $limit; $sieve = ""; vec($sieve, 0, 1) = 1; vec($sieve, 1, 1) = 1; vec($sieve, $limit, 1) = 0; $reached = 1; while($reached < $sqrtLimit) { $prime = $reached + 1; ++ $prime while vec($sieve, $prime, 1); print "$prime is a prime\n"; $fill = 2 * $prime; while($fill <= $limit) { vec($sieve, $fill, 1) = 1; $fill += $prime; } $reached = $prime; } foreach $value ($reached + 1 .. $limit) { print "$value is a prime\n" unless vec($sieve, $value, 1); }