Desafio Python

Números primos com while e continue

Enunciado

Escreva um programa que use um laço while para verificar e imprimir todos os números primos entre 2 e 30 (inclusive). Use continue para pular números não primos e break para otimizar a verificação de divisores.

Requisitos

  • Usar while como laço principal.
  • Usar continue para pular números que não são primos.
  • Usar break ao encontrar um divisor para otimizar.
  • Imprimir cada primo em uma linha separada.

Código inicial

# Complete o código
numero = 2
while numero <= 30:
    # verifique se é primo
    numero += 1

Saída esperada

2
3
5
7
11
13
17
19
23
29
Ver dica

Para testar se n é primo, verifique divisores de 2 até a raiz quadrada de n. Use break se encontrar um divisor.

Mostrar solução
numero = 2
while numero <= 30:
    # Verifica se 'numero' é primo
    divisor = 2
    while divisor * divisor <= numero:
        if numero % divisor == 0:
            break  # encontrou divisor, não é primo
        divisor += 1
    else:
        # O else do while executa se não houve break
        print(numero)
    numero += 1

Passo a passo

  1. Iniciamos numero com 2, o primeiro primo.
  2. O while externo percorre de 2 a 30.
  3. Para cada numero, inicializamos divisor = 2.
  4. O while interno testa divisores até que divisor * divisor > numero (equivalente a testar até a raiz quadrada).
  5. Se numero % divisor == 0, encontramos um divisor, então usamos break para sair do loop interno.
  6. O else do while interno executa apenas se o loop terminar sem break, ou seja, se nenhum divisor foi encontrado — logo, numero é primo.
  7. Imprimimos o primo e incrementamos numero.

Por que funciona

O while externo controla a sequência de números. O while interno verifica a primalidade. O break interrompe a verificação assim que um divisor é encontrado, otimizando o processo. O else do while é executado somente quando o loop interno termina naturalmente (sem break), indicando que o número é primo. O continue não foi usado explicitamente aqui, mas poderia substituir o else para pular a impressão.

Erros comuns

  • Esquecer de incrementar divisor: loop infinito.
  • Usar range dentro do while sem necessidade: o while já controla a repetição.
  • Confundir o else do while com o else do if: o else do while pertence ao loop, não à condição.
  • Não limitar a verificação à raiz quadrada: funciona, mas é menos eficiente.

Outra forma de resolver

numero = 2
while numero <= 30:
    for divisor in range(2, int(numero ** 0.5) + 1):
        if numero % divisor == 0:
            break
    else:
        print(numero)
    numero += 1

Usa for no lugar do while interno, mais idiomático para intervalos conhecidos.

Saída esperada

2
3
5
7
11
13
17
19
23
29