Add function to list primes

This commit is contained in:
David Doblas Jiménez 2021-07-03 16:54:47 +02:00
parent 24835a4496
commit fdc8a5bac5

View File

@ -16,7 +16,6 @@ def timeit(name):
return profile
def is_prime(n):
if n % 2 == 0 and n > 2:
return False
@ -24,3 +23,22 @@ def is_prime(n):
if n % i == 0:
return False
return True
# Returns a list of True and False indicating whether each number is prime.
# For 0 <= i <= n, result[i] is True if i is a prime number, False otherwise.
def list_primality(n):
# Sieve of Eratosthenes
result = [True] * (n + 1)
result[0] = result[1] = False
for i in range(int(math.sqrt(n) + 1)):
if result[i]:
for j in range(i * i, len(result), i):
result[j] = False
return result
# Returns all the prime numbers less than or equal to n, in ascending order
# For example: list_primes(97) = [2, 3, 5, 7, 11, ..., 83, 89, 97].
def list_primes(n):
return [i for (i, is_prime) in enumerate(list_primality(n)) if is_prime]