Faça um programa que receba dez números, calcule e mostre a soma dos números pares e a soma dos números primos.
Passo 1
O enunciado pede que a gente crie um programa que:
- Receba
) números do usuário. - Calcule e mostre a soma dos números pares entre esses
) números. - Calcule e mostre a soma dos números primos entre esses
) números.
Informações relevantes dadas:
- A quantidade de entradas é fixa: exatamente
) números. - Precisamos de duas saídas: a soma dos pares e a soma dos primos.
- Não foi dito se os números são inteiros, mas normalmente esse problema assume inteiros. Vou assumir que os números de entrada são inteiros (positivo, zero ou negativo). Se algum número não for inteiro, o programa abaixo dará erro; em ambiente de prova geralmente as entradas são inteiras.
Passo 2
Vamos explicar o que é um número par (para você lembrar na hora da prova):
- Um número inteiro
é par se o resto da divisão de por for . Em notação: é par se . - Exemplo:
é par porque . não é par porque .
Na programação, o teste de par geralmente é feito com o operador resto: em muitas linguagens é escrito como
n % 2 == 0.Passo 3
Agora o que é um número primo (muito importante e costuma confundir):
- Um número inteiro
é primo se e seus únicos divisores inteiros positivos são e . - Logo,
são primos; , e números negativos não são considerados primos. - Para verificar se
é primo de forma eficiente suficiente para ) números em prova, podemos testar se existe algum inteiro com que divide . Se existir, não é primo; caso contrário, é primo. Por que basta testar até ? Porque se com , então . Então qualquer fator não-trivial aparece em pares e um deles é . - Exemplo: para testar
, testamos divisores (pois ); nenhum divide , então é primo.
Nota prática: ao implementar o teste, primeiro eliminamos
(não primo), depois
(primo), e então testamos divisores de
até
.
Passo 4
Estratégia do programa (alto nível), para você poder explicar na prova:
- Inicializar dois acumuladores:
e . - Repetir
) vezes: - Ler um número inteiro
. - Se
for par (testar ), somar em . - Se
for primo (usar o teste explicado no Passo 3), somar em .
- Ler um número inteiro
- Após as
) leituras, mostrar os valores finais de e .
Observação: um número pode ser tanto par quanto primo? Sim: o único número par primo é
. Então se a entrada incluir
, ele será somado em ambas as somas.
Passo 5
Vamos detalhar a implementação do teste de primalidade (para você entender cada linha quando codificar):
- Função is_prime(
): - Se
então retornar falso (não primo). - Se
então retornar verdadeiro (primo). - Se
então retornar falso (número par maior que 2 não é primo). - Para cada inteiro
de até com passo (testando apenas ímpares), verificar se . Se encontrar divisor, retornar falso. - Se nenhum divisor for encontrado, retornar verdadeiro.
- Se
- Razão do passo
: depois de eliminar pares, só precisamos testar ímpares; isso diminui pela metade os testes.
Passo 6
Um exemplo manual para fixar (faça junto comigo, é mais fácil assim):
Suponha as ) entradas:
.
Suponha as
- Pares entre esses:
. Soma dos pares = . - Primos entre esses:
. Soma dos primos = .
Percebe comoentrou nas duas somas? Isso é esperado.
Passo 7
Agora, explicando a implementação linha a linha (para você entender o código que vai na prova):
- Criamos uma função chamada
is_prime(n)que segue os passos do Passo 5. - Inicializamos
soma_pares = 0esoma_primos = 0. - Fazemos um laço que roda exatamente
) vezes. Em cada iteração: - Lemos um inteiro
usando int(input()). - Se
n % 2 == 0, atualizamossoma_pares += n. - Se
is_prime(n)for verdadeiro, atualizamossoma_primos += n.
- Lemos um inteiro
- Ao final imprimimos as duas somas, uma por linha, com mensagens claras.
Passo 8
Dicas para a prova:
- Explique que o programa faz leituras sequenciais e acumula somas; essa explicação já demonstra que você entende o fluxo.
- Mentione a complexidade do teste de primalidade: para um número
o teste faz até divisões (isso é só para mostrar entendimento; não precisa calcular na prova). - Lembre-se de tratar
como não primo (isso costuma ser pegadinha).
Resposta
def is_prime(n):
if n <= 1:
return False
if n == 2:
return True
if n % 2 == 0:
return False
d = 3
while d * d <= n:
if n % d == 0:
return False
d += 2
return True
soma_pares = 0
soma_primos = 0
for _ in range(10):
n = int(input())
if n % 2 == 0:
soma_pares += n
if is_prime(n):
soma_primos += n
print(soma_pares)
print(soma_primos)