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:

  1. 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.
  2. 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).
  3. 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.
  4. 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:

  1. Solicita que o usuário insira o valor mínimo (inf) e o valor máximo (sup) do intervalo a gerar.
  2. Exibe uma mensagem informando que os números primos no intervalo de inf a sup serão exibidos na sequência.
  3. Usando um laço for, percorre todos os valores de i no intervalo de inf a sup + 1.
  4. Para cada valor de i, chama a função primo(i) para verificar se i é um número primo.
  5. 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 .

 

Sobre Fábio dos Reis (1214 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

2 Comentários em Como gerar números primos em Python em um intervalo especificado

  1. 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!

Escreva um comentário

Seu e-mail não será divulgado


*