# Algorithm from https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes#Pseudocode def primesUpTo(n): assert n >= 2, "n must be >= 2" A = [True for i in range(n + 1)] for i in range(2, n + 1): if A[i]: for j in range(i ** 2, n + 1, i): A[j] = False return set([i for i in range(2, n + 1) if A[i]]) def main(): # Testing: s = primesUpTo(1000) print(s) # Do some checks: assert primesUpTo(30) == {2, 3, 5, 7, 11, 13, 17, 19, 23, 29} assert len(primesUpTo(1000)) == 168 assert len(primesUpTo(7918)) == 999 assert len(primesUpTo(7919)) == 1000 print("All tests passed!") if __name__ == "__main__": main()