Sieve of Eratosthenes - Finding Primes Python

前端 未结 17 2524
旧巷少年郎
旧巷少年郎 2020-11-22 04:40

Just to clarify, this is not a homework problem :)

I wanted to find primes for a math application I am building & came across Sieve of Eratosthenes approach.

17条回答
  •  悲哀的现实
    2020-11-22 05:08

    By combining contributions from many enthusiasts (including Glenn Maynard and MrHIDEn from above comments), I came up with following piece of code in python 2:

    def simpleSieve(sieveSize):
        #creating Sieve.
        sieve = [True] * (sieveSize+1)
        # 0 and 1 are not considered prime.
        sieve[0] = False
        sieve[1] = False
        for i in xrange(2,int(math.sqrt(sieveSize))+1):
            if sieve[i] == False:
                continue
            for pointer in xrange(i**2, sieveSize+1, i):
                sieve[pointer] = False
        # Sieve is left with prime numbers == True
        primes = []
        for i in xrange(sieveSize+1):
            if sieve[i] == True:
                primes.append(i)
        return primes
    
    sieveSize = input()
    primes = simpleSieve(sieveSize)
    

    Time taken for computation on my machine for different inputs in power of 10 is:

    • 3 : 0.3 ms
    • 4 : 2.4 ms
    • 5 : 23 ms
    • 6 : 0.26 s
    • 7 : 3.1 s
    • 8 : 33 s

提交回复
热议问题