A fast (very fast) implementation of the Sieve of Atkin: http://cr.yp.to/primegen.html
The less well known Sieve of Sundaram:
#include <vector>
#include <algorithm>
#include <iostream>
// sieve of sundaram (naive implementation)
std::vector<int> generate_primes( int N )
{
const int M = N / 2 ;
std::vector<bool> sieve( M, true ) ;
for( int i = 1 ; i < M ; ++i )
{
const int L = (M-i) / ( 2*i + 1 ) ;
for( int j = i ; j <= L ; ++j )
sieve[ i + j + 2*i*j ] = false ;
}
std::vector<int> primes ;
primes.push_back(2) ;
for( int i = 1 ; i < M ; ++i )
if( sieve[i] ) primes.push_back( i*2 + 1 ) ;
return primes ;
}
int main()
{
std::vector<int> primes = generate_primes(100) ;
std::for_each( primes.begin(), primes.end(),
[] ( int n ) { std::cout << n << ' ' ; } ) ; // C++1x
std::cout << '\n' ;
}
And the exotic visual sieve: http://plus.maths.org/issue47/features/kirk/index.html