def primegen():
    """'Infinite' prime generator - a litte slow
        about 7.4 sec for 10^6 primes
              90  sec for 10^7 primes
    """
    yield from (2,3)
    blocked = {}
    ps = primegen()
    candidate = prime = next(ps) and next(ps)
    prime_squared = prime * prime
    while True:
        candidate += 2
        if candidate in blocked:
            step = blocked.pop(candidate)
        elif candidate == prime_squared:
            step = prime + prime
            prime = next(ps)
            prime_squared = prime * prime
        else:
            yield candidate
            continue
        m = candidate + step
        while m in blocked:
            m += step
        blocked[m] = step
        
p = primegen()
for i in range(10):
	print(next(p))
