def crivo(N): """Gera a lista de todos os primos entre 2 e N, inclusive""" candidatos = range(2,N+1) informações = [0]*len(candidatos) #legenda: 0 é "não sei ainda" #1: sei que é primo #2: sei que é composto índice_atual = 0 #fazer passagens pela lista, obtendo informações; #a cada passagem, o menor número sobre o qual eu não concluí nada, na verdade, é primo #depois retiramos seus múltiplos, começando em seu quadrado while candidatos[índice_atual]**2 <= N: informações[índice_atual] = 1 # novo primo encontrado primo_atual = candidatos[índice_atual] #retirar seus múltiplos, a partir de seu quadrado for índice_composto in range(primo_atual**2 - 2, N-1, primo_atual): informações[índice_composto] = 2 #atualizar o índice_atual para começar a próxima passagem pela lista while informações[índice_atual] != 0: índice_atual += 1 #passagens finalizadas; tudo que eu não concluí ser composto, na verdade é primo! primos = [] for índice in range(N-1): if informações[índice] != 2: list.append(primos,candidatos[índice]) return primos