def erat2():
    D = {}
    (yield 2)
    for q in itertools.islice(itertools.count(3), 0, None, 2):
        p = D.pop(q, None)
        if (p is None):
            D[(q * q)] = q
            (yield q)
        else:
            x = (p + q)
            while ((x in D) or (not (x & 1))):
                x += p
            D[x] = p
def erat2():
    D = {}
    (yield 2)
    for q in itertools.islice(itertools.count(3), 0, None, 2):
        p = D.pop(q, None)
        if (p is None):
            D[(q * q)] = q
            (yield q)
        else:
            x = (p + q)
            while ((x in D) or (not (x & 1))):
                x += p
            D[x] = p