Questăo 4 - Faça um programa que receba 30 números naturais. Seu programa deve exibir:
O menor número primo digitado.

Passo 1

O enunciado pede: receber exatamente 30 números naturais (ou seja, 30 entradas) e exibir o menor número primo digitado.
Informações dadas e condições importantes:
  • Devemos ler 30 números naturais.
  • Devemos identificar quais desses números são primos.
  • Devemos imprimir o menor dentre os primos lidos.
  • O enunciado não diz o que fazer se nenhum primo for digitado — então o programa precisa tratar esse caso e exibir uma mensagem clara (por exemplo: “Nenhum número primo foi digitado”).

Passo 2

O que é um número primo?
Um número inteiro p é primo quando p\ge 2 e suas únicas divisores positivos são 1 e p (ou seja, ele não é divisível por nenhum inteiro entre 2 e p-1). Observe que \,1 não é primo. Exemplos: \,2,3,5,7,11 são primos; \,0,1,4,6,9 não são.

Passo 3

Qual método usar para testar primalidade aqui? (escolha e justificativa)
Para entradas simples e somente 30 números, o método mais direto e suficiente é a divisão por tentativa (trial division), testando se algum inteiro divisor menor ou igual à raiz quadrada de n divide n. A razão: se n tem um divisor a tal que 1<a<n, então existe um par de fatores a e b com n=a\cdot b; pelo menos um entre a e b é \le \sqrt{n}. Logo, é suficiente checar divisores até \lfloor\sqrt{n}\rfloor. Isso reduz muito o trabalho comparado a checar todos os números até n-1.

Passo 4

Implementando a função de teste de primalidade passo a passo (explicação didática):
  1. Se n<2, então n não é primo. (Porque primos começam em \,2.)
  2. Se n=2, é primo.
  3. Se n é par e n>2, não é primo (divisível por 2).
  4. Caso contrário, precisamos testar divisores ímpares i começando em 3 até \lfloor\sqrt{n}\rfloor. Para cada i, se i divide n (isto é, n\%i==0), então n não é primo. Se nenhum divisor for encontrado, n é primo.
Por que pular pares depois do 2? Porque se n não é divisível por 2, testar 4,6,8,\dots é inútil — já sabemos que esses não dividirão (são múltiplos de 2). Então testamos apenas ímpares 3,5,7,\dots.
Como implementar o limite \lfloor\sqrt{n}\rfloor sem ponto flutuante? Faça o laço com condição i*i \le n. Assim usamos multiplicação inteira, segura e exata.

Passo 5

Algoritmo principal (passo a passo de alto nível):
  1. Inicialize uma variável que guardará o menor primo encontrado, por exemplo \text{min\_primo}\leftarrow nenhum/sentença (em código: None).
  2. Repita 30 vezes:
    • Leia um número n.
    • Teste se n é primo usando a função de teste descrita.
    • Se n for primo e ( \text{min\_primo} ainda não definido ou n < \text{min\_primo}), atualize \text{min\_primo}\leftarrow n.
  3. Após ler os 30 números, se \text{min\_primo} ainda não foi definido, imprima uma mensagem indicando que não houve primos; caso contrário, imprima \text{min\_primo}.
Essa estratégia mantém apenas um valor mínimo em memória e testa primalidade de cada entrada na hora.

Passo 6

Exemplo manual pequeno para fixar (simule um trecho de execução):
Suponha que as primeiras entradas sejam: \,4, 9, 15, 17, 2, 21,\dots
  • Começa com \text{min\_primo}= nenhum.
  • 4 → não primo → nada muda.
  • 9 → não primo ( 3 divide) → nada muda.
  • 15 → não primo ( 3 divide) → nada muda.
  • 17 → primo → \text{min\_primo}\leftarrow 17.
  • 2 → primo e 2<17 \text{min\_primo}\leftarrow 2.
    A partir daí, nenhum primo menor que 2 existe, então \text{min\_primo} continuará 2.

Passo 7

Casos especiais e dicas para a prova:
  • Lembre-se: \,0 e \,1 não são primos. Trate-os como não primos.
  • Se o enunciado exigir uma saída em formato específico quando não houver primos, siga-o; caso contrário, uma mensagem como “Nenhum número primo foi digitado” é aceitável.
  • Complexidade: cada teste de primalidade custa até O(\sqrt{n}) divisões; com apenas 30 números isso é rapidamente executável sem otimizações extras.
  • Sempre que possível, escreva a função de primalidade separada para evitar repetir código na prova.

Passo 8

Código (implementação prática em Python) — este programa lê 30 entradas, determina o menor primo e o imprime, ou imprime uma mensagem se não houver primos.

Resposta

def is_prime(n):
    # Teste simples de primalidade por tentativa até a raiz quadrada
    if n < 2:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    i = 3
    while i * i <= n:
        if n % i == 0:
            return False
        i += 2
    return True

min_primo = None

for _ in range(30):
    # Leia um número natural (supondo entrada correta)
    n = int(input())
    if is_prime(n):
        if (min_primo is None) or (n < min_primo):
            min_primo = n

if min_primo is None:
    print("Nenhum número primo foi digitado")
else:
    print(min_primo)

Exercícios relacionados