Sign in or register Home

Snippet #5: Fast function that returns the list of prime numbers in interval [2, n)


Author: rdmoores Date: 2008-04-23 05:38:43


def find_primes(n):
    """ returns a list of prime numbers from in interval [2, n) """
    # from a post by bluemoo for #187 in Project Euler.
    # a very fast algorithm.
    # see http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

    if n < 2:
        return []
    if n == 2:
        return [2]
    # do only odd numbers starting at 3
    s = range(3, n, 2)
    # n**0.5 may be slightly faster than math.sqrt(n)
    mroot = n ** 0.5
    half = len(s)
    i = 0
    m = 3
    while m <= mroot:
        if s[i]:
            j = (m * m - 3)//2
            s[j] = 0
            while j < half:
                s[j] = 0
                j += m
        i = i + 1
        m = 2 * i + 3
    # make exception for 2
    return [2]+[x for x in s if x]







Category: Functions
Tag:

Comment: