Quantcast
Channel: Sieve of Eratosthenes - Finding Primes Python - Stack Overflow
Viewing all articles
Browse latest Browse all 28

Answer by FooBar167 for Sieve of Eratosthenes - Finding Primes Python

$
0
0

I prefer NumPy because of speed.

import numpy as np# Find all prime numbers using Sieve of Eratosthenesdef get_primes1(n):    m = int(np.sqrt(n))    is_prime = np.ones(n, dtype=bool)    is_prime[:2] = False  # 0 and 1 are not primes    for i in range(2, m):        if is_prime[i] == False:            continue        is_prime[i*i::i] = False    return np.nonzero(is_prime)[0]# Find all prime numbers using brute-force.def isprime(n):''' Check if integer n is a prime '''    n = abs(int(n))  # n is a positive integer    if n < 2:  # 0 and 1 are not primes        return False    if n == 2:  # 2 is the only even prime number        return True    if not n & 1:  # all other even numbers are not primes        return False    # Range starts with 3 and only needs to go up the square root    # of n for all odd numbers    for x in range(3, int(n**0.5)+1, 2):        if n % x == 0:            return False    return True# To apply a function to a numpy array, one have to vectorize the functiondef get_primes2(n):    vectorized_isprime = np.vectorize(isprime)    a = np.arange(n)    return a[vectorized_isprime(a)]

Check the output:

n = 100print(get_primes1(n))print(get_primes2(n))        [ 2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97]    [ 2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97]

Compare the speed of Sieve of Eratosthenes and brute-force on Jupyter Notebook. Sieve of Eratosthenes in 539 times faster than brute-force for million elements.

%timeit get_primes1(1000000)%timeit get_primes2(1000000)4.79 ms ± 90.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)2.58 s ± 31.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Viewing all articles
Browse latest Browse all 28

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>