Prévia do material em texto
Para resolver esse problema, precisamos desenvolver um programa que receba dois números \( n \) e \( m \) como entrada e retorne todos os números primos que estão no intervalo entre esses dois números. O programa deve continuar executando infinitamente até que \( n \) ou \( m \) sejam menores ou iguais a um, momento em que deve parar sua execução.
Vamos abordar a solução passo a passo:
### Passos para Implementação:
1. **Entrada de Dados**: O programa deve solicitar ao usuário que insira dois números \( n \) e \( m \).
2. **Verificação de Condição de Parada**: Verificar se \( n \) ou \( m \) são menores ou iguais a um. Se uma das condições for verdadeira, o programa deve parar.
3. **Identificação de Números Primos**: Para cada par \( n \) e \( m \), identificar todos os números primos no intervalo entre eles.
4. **Saída dos Números Primos**: Mostrar os números primos encontrados para cada par \( n \) e \( m \).
5. **Repetição Infinita**: O programa deve continuar solicitando novos valores de \( n \) e \( m \) e repetir o processo até que a condição de parada seja atingida.
### Detalhamento da Implementação:
- **Função para Verificar Números Primos**: Criar uma função que verifica se um número é primo. Um número primo é aquele que é divisível apenas por 1 e por ele mesmo.
- **Estrutura de Repetição**: Usar um loop infinito (como um loop `while True`) para solicitar continuamente novos valores de entrada e processá-los até que a condição de parada seja atingida.
- **Interrupção do Loop**: Usar uma instrução `break` para interromper o loop infinito quando \( n \) ou \( m \) forem menores ou iguais a um.
### Exemplo de Código em Python:
```python
def is_prime(num):
""" Verifica se um número é primo """
if num < 2:
return False
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
return False
return True
while True:
try:
n = int(input("Digite o valor de n: "))
m = int(input("Digite o valor de m: "))
if n <= 1 or m <= 1:
print("Programa encerrado. Um dos números é menor ou igual a um.")
break
if n > m:
n, m = m, n
prime_numbers = [num for num in range(n, m + 1) if is_prime(num)]
print(f"Números primos entre {n} e {m}: {prime_numbers}")
except ValueError:
print("Entrada inválida. Por favor, digite apenas números inteiros.")
```
### Explicação do Código:
- **`is_prime`**: Função que verifica se um número é primo usando um loop que verifica divisões até a raiz quadrada do número, para otimização.
- **Loop `while True`**: Continua executando indefinidamente até que uma condição de parada seja atingida.
- **Verificação de Condição de Parada**: Antes de começar a calcular os números primos, verifica se \( n \) ou \( m \) são menores ou iguais a um.
- **Ordenação dos Números**: Garante que o menor número seja \( n \) e o maior seja \( m \), para facilitar a iteração.
- **Lista de Números Primos**: Cria uma lista de números primos no intervalo usando uma compreensão de lista.
- **Exceções**: Captura erros de entrada, como valores não inteiros, para garantir que o programa não quebre com entradas inválidas.
### Funcionamento do Programa:
Ao executar o programa, ele solicitará repetidamente que você insira valores para \( n \) e \( m \). Ele então calculará e mostrará todos os números primos entre esses dois valores. Quando \( n \) ou \( m \) forem menores ou iguais a um, o programa imprimirá uma mensagem indicando o término da execução.
Esse programa oferece uma solução prática e eficiente para encontrar números primos em um intervalo dado, enquanto mantém a capacidade de executar indefinidamente até que uma condição de parada seja alcançada.