# 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()