merlyn wrote an interesting
column that uses the classic
Sieve of Eratosthenes for finding primes. It includes clever use of the
vec operator. Omitting the
print it finds all primes below 1 million in 10 seconds on a mediocre i386:
$ time perl -w
use strict;
my $UPPER = 1_000_000;
my $sieve = "";
GUESS: for (my $guess = 2; $guess <= $UPPER; $guess++) {
next GUESS if vec($sieve,$guess,1);
#print "$guess\n";
for (my $mults = $guess * $guess; $mults <= $UPPER; $mults += $guess
+) {
vec($sieve,$mults,1) = 1;
}
}
__END__
real 0m10.003s
user 0m2.191s
sys 0m0.003s
There's an interesting animation
here that shows how the algorithm works.
See also Math::Prime::XS.
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.