Como gerar números primos em Python em um intervalo especificado
Gerar números primos em Python em um intervalo especificado
Exercício: Escreva um programa em Python que retorne uma lista de números primos compreendidos em um intervalo fornecido pelo usuário (incluindo os extremos). Use funções para tal.
Por exemplo, ao executar o script se o usuário solicitar a lista de primos entre 7 e 50, o programa deve retornar um resultado como segue:
Entre com o menor valor: 7 Entre com o maior valor: 50 Os números primos no intervalo de 7 a 50 são: 7 11 13 17 19 23 29 31 37 41 43 47
Vejamos o código que permite gerar números primos em Python.
Código
# Como gerar números primos em um intervalo numérico # Função para verificar os números primos def primo(n): if n < 2: return False for i in range(2, int(n/2)+1): if n % i == 0: return False return True if __name__=='__main__': # Usuário escolhe o intervalo inf = int(input('Entre com o menor valor: ')) sup = int(input('Entre com o maior valor: ')) print('Os primos no intervalo de {} a {} são:'.format(inf, sup)) for i in range(inf, sup + 1): if primo(i): print(i, end=' ')
Funcionamento do script
Vou dividir a explicação em duas partes: a função primo e o bloco principal do programa.
Função primo(n)
A função primo(n) é definida para verificar se um número n é primo ou não. Ela funciona da seguinte maneira:
- Verifica se um valor n passado como parâmetro é menor que 2. Se for, retorna False, pois números menores que 2 não são primos.
- Se n não for menor do que 2, a função inicia um loop que percorre os valores de i de 2 até n/2 + 1 (metade +1 do valor informado).
- Para cada valor de i, verifica se n é divisível por i (ou seja, se n % i == 0). Se essa condição for verdadeira, significa que n não é primo, pois possui um divisor além de 1 e ele mesmo. Portanto, a função retorna False.
- Caso nenhum valor de i resulte em uma divisão exata de n, a função retorna True, indicando que n é um número primo.
Bloco if __name__==’__main__’:
No bloco principal, o programa realiza as seguintes ações:
- Solicita que o usuário insira o valor mínimo (inf) e o valor máximo (sup) do intervalo a gerar.
- Exibe uma mensagem informando que os números primos no intervalo de inf a sup serão exibidos na sequência.
- Usando um laço for, percorre todos os valores de i no intervalo de inf a sup + 1.
- Para cada valor de i, chama a função primo(i) para verificar se i é um número primo.
- Se i for primo (ou seja, se a função primo(i) retornar True), o valor de i é impresso na mesma linha, seguido de um espaço. Isso ocorre para todos os números primos encontrados no intervalo.
Portanto, o programa vai iterar por todos os números no intervalo especificado pelo usuário, verificar se cada número é primo usando a função primo(n), e imprimir os números primos encontrados.
Veja que essa implementação é funcional, porém não é a mais eficiente em termos de tempo de execução para encontrar números primos, especialmente para intervalos maiores, pois realiza uma divisão para cada número no intervalo.
Existem algoritmos mais eficientes para geração de números primos, como o Crivo de Eratóstenes .
o código está retornando o numero 4 junto com os numeros primos
Erro de digitação. Na linha:
for i in range(2, int(n/2)):
Ficou faltando somar +1 para que o teste de divisão por si próprio retorne o valor correto. O código deve ficar assim:
for i in range(2, int(n/2)+1):
Obrigado por avisar!