import stackless
import sys

def counter(ch, i=1):
	while True:
		ch.send(i)
		i += 1

def sieve(prime):
	def filter(p, r, s):
		while True:
			x = r.receive()
			if x % p: s.send(x)

	def applyfilter(ch, p):
		nch = stackless.channel()
		stackless.tasklet(filter)(p, ch, nch)
		return nch

	ch = stackless.channel()
	stackless.tasklet(counter)(ch, 2)

	while True:
		p = ch.receive()
		prime.send(p)
		ch = applyfilter(ch, p)

if __name__ == "__main__":
	if len(sys.argv) < 2:
		goal = 100
	else:
		goal = int(sys.argv[1])

	primes = stackless.channel()
	stackless.tasklet(sieve)(primes)

	for i in xrange(goal):
		print primes.receive()

