import numpy as np
def make_prime(U):
is_prime = np.zeros(U,np.bool)
is_prime[2] = 1
is_prime[3::2] = 1
M = int(U**.5)+1
for p in range(3,M,2):
if is_prime[p]:
is_prime[p*p::p+p] = 0
return is_prime, is_prime.nonzero()[0]
is_prime, primes = make_prime(100)
primes
%time make_prime(10 ** 6)
%time make_prime(10 ** 7)
%time make_prime(10 ** 8)
%time make_prime(10 ** 9)