language: Python (python 2.7.3)
date: 1090 days 1 hour ago
link:
visibility: public
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
from math import sqrt
 
def prime_numbers(limit=1000000):
    '''Prime number generator. Yields the series
    2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ...    
    using Sieve of Eratosthenes.
    
    This generator requires the bitarray module if the limit is above 100 million.'''
    yield 2
    sub_limit = int(sqrt(limit)) 
    flags = [False, False] + [True] * (limit - 2)
    
    # Step through all the odd numbers
    for i in xrange(3, limit, 2):       
        if flags[i]:
            yield i
            if i <= sub_limit:
                i2 = i*i
                flags[i2::i<<1] = [False] * len(flags[i2::i<<1])
 
if __name__ == '__main__':
    from time import time
    start = time()
    for p in prime_numbers(1000000): pass
    print time() - start, "seconds" 
#    print('\n'.join(str(p) for p in primes))