Now,
I am sure that you are all thinking that I must write horrible code normally in python… But that is incorrect, I can write quite nice code. Below I have placed a “normal” version of a prime sieve. Please note, I usually have a bit of whitespace between functions, but I am unable to at the moment due to some wordpress bugs.
I quite like this code, even though I am using a little trick in that the list the generator is iterating over, is being changed while the generator is still using it.
import math def primes(maxPrime): maxSearch = int(math.sqrt(maxPrime)) nums = range(maxPrime+1) nums[1] = 0 # 1 is not a prime primes = (n for n in nums if n) # This line is nasty... Changing the thing # I am iterating over may cause problems for n in primes: if n <= maxSearch: for i in xrange(n**2, maxPrime+1, n): nums[i] = 0 # Mark as non prime yield n def main(): print ', '.join(str(i) for i in primes(10**6)) if __name__ == "__main__": main()