from math import sqrt

class NextPrime:
    def __init__(self):
        self.num = 1 # todos começam em 1

    def __iter__(self):
        return self # retorna o próprio objeto, não o valor

    def __next__(self):
        if self.num in (1, 2): # se for 1 ou 2, o próximo número (2 ou 3) com certeza é primo
            self.num += 1
            return self.num

        # aqui eu já sei que "num" é pelo menos 3
        while True:
            self.num += 2 # somo 2, pois não preciso testar números pares
            if self.num % 2 != 0 and self.num % 3 != 0: # se for divisível por 2 ou 3, nem testa o número
                # não é múltiplo de 2 nem de 3, testar se é divisor de 6k - 1 ou 6k + 1
                for i in range(5, int(sqrt(self.num)) + 1, 6):
                    if self.num % i == 0 or self.num % (i + 2) == 0:
                        break # não é primo, testa o próximo
                else: # é primo, interrompe o while
                    break
        return self.num

n = NextPrime()
for i in n:
	print(i)