- Escreva um método que recebe dois números reais
e
e retorna a soma de todos os números primos existentes entre esses dois
Passo 1
O enunciado pede um método que receba dois números reais
e
e retorne a soma de todos os números primos existentes entre eles.
Conteúdo necessário:
– Como converter um intervalo em reais num intervalo de inteiros onde só faz sentido procurar primos.
– Teste de primalidade por divisão até a raiz quadrada.
– Estruturas de controle (condicional, laço) e acumulador para somar.
Conteúdo necessário:
– Como converter um intervalo em reais num intervalo de inteiros onde só faz sentido procurar primos.
– Teste de primalidade por divisão até a raiz quadrada.
– Estruturas de controle (condicional, laço) e acumulador para somar.
Passo 2
Definir corretamente os limites inteiros do laço de busca de primos.
- Calcule
- Converta para inteiros:
- Ajuste para o domínio dos primos (que só existem para inteiros
):
– Se, não há primos no intervalo, o método deve retornar .
– Se, faça .
Passo 3
Descrever o teste de primalidade de um inteiro
.
Um inteiro é primo se não existir nenhum divisor inteiro
tal que
Um inteiro
e
divida
sem resto.
Logo, o procedimento isPrime(n) é:
– Se , retorna false.
– Para cada de
até
, se
retorna false.
– Se passar por todos, retorna true.
Logo, o procedimento isPrime(n) é:
– Se
– Para cada
– Se passar por todos, retorna true.
Passo 4
Montar o laço principal que soma os primos no intervalo inteiro
:
- Inicialize um acumulador
. - Para cada inteiro
de até :
– Se isPrimefor verdadeiro, faça . - Ao final do laço, retorne
.
Resposta
A seguir, um pseudocódigo que implementa tudo isso:
function somaPrimos(a, b):
# 1) Ordena os limites
if a > b:
swap(a, b)
# 2) Converte para inteiros
L = ceil(a)
U = floor(b)
# 3) Ajusta domínio de primos
if U < 2:
return 0
if L < 2:
L \(=2\)
# 4) Soma primos
S \(=0\)
for k from L to U:
if isPrime(k):
S = S + k
return S
function isPrime(n):
if n < 2:
return false
limite = floor(sqrt(n))
for d from 2 to limite:
if n mod d \(==0\):
return false
return true