Faça um programa que leia um número não determinado de pares de valores
, todos inteiros e positivos, um par de cada vez, e que calcule e mostre a soma de todos os números inteiros entre
e
(inclusive). A digitação de pares terminará quando
for maior ou igual a
.
Passo 1
O enunciado pede que a gente leia um número indefinido de pares de valores
, ambos inteiros positivos, um par por vez, e para cada par calcule e mostre a soma de todos os inteiros entre
e
inclusive. A leitura de pares termina (o programa para) quando encontrarmos um par em que
seja maior ou igual a
. Lista clara do que foi dado e pedido:
- Entrada: sequências de pares
, um par por vez. - Condição de término: pare quando encontrar um par com
. - Saída: para cada par lido com
, imprimir a soma dos inteiros entre e inclusive.
Passo 2
Vamos entender claramente o que significa “soma de todos os inteiros entre
e
inclusive”. Se, por exemplo,
e
, queremos
Uma forma direta de fazer isso é somar termo a termo com um laço (loop): começar com um acumulador
, e para
indo de
até
fazer
. Isso funciona e é simples de implementar, mas pode ser lento se
for grande e, em prova, a gente prefere uma solução que use pouco trabalho mental/calculadora.
Passo 3
Existe uma fórmula fechada para a soma de inteiros consecutivos, que vem da soma de uma progressão aritmética. Sea o primeiro termo
e o último termo
. Para a nossa soma:
-
-
- o número de termos é
A soma
de uma progressão aritmética com
termos, primeiro termo
e último termo
é
Aplicando ao nosso caso:
Vou explicar por que isso funciona de um jeito simples: imagine que você emparelha o primeiro e o último termo, o segundo com o penúltimo, etc. Cada par soma
. Há
termos, ou seja,
pares (se
for par) — a fórmula acima trata ambos os casos (par e ímpar) de forma elegante.
Passo 4
Exemplo numérico com a fórmula (pra você ver como aplicar na prova sem a calculadora cheia de loops): para
e
,
então
que bate com
.
Observação importante sobre inteiros: o produto
é sempre par, então a divisão por
dá um inteiro. Isso porque ou
é par ou
é par.
Passo 5
Como o enunciado pede para processar vários pares até a condição de parada
, o esquema do programa (pseudocódigo) fica assim:
- Repetir:
a. Ler um par.
b. Seentão encerrar o processamento (não imprimir nada para esse par).
c. Caso contrário, calculare .
d. Imprimir. - Fim.
Nota: se a entrada terminar por EOF antes de aparecer um par com
, o programa também deve terminar graciosamente. Em provas normalmente assume-se entrada bem formada, mas é bom tratar EOF se for implementar.
Passo 6
Complexidade e por que usar a fórmula é melhor na prova: o método direto somando termo a termo tem custo
por par, enquanto a fórmula faz em tempo constante
por par — ou seja, muito mais rápido e mais simples de justificar em prova. Além disso, com a fórmula você evita loops e possíveis erros de overflow (em linguagens sem inteiros grandes) — em Python isso não é problema, mas mentalmente é mais elegante.
Passo 7
Vamos ver um exemplo de execução para fixar:
Entrada (pares, um por linha):
3 7
2 2
10 20
0 0
Entrada (pares, um por linha):
3 7
2 2
10 20
0 0
Processamento:
- Para
: → → → imprime . - Para
: → condição de parada atingida → programa encerra (não imprime nada para esse par).
Assim, a saída seria só:
25
Passo 8
Implementação prática em Python (explicando coisas que você pode copiar na prova/ambiente de programação):
- Use um loop que lê linhas até EOF.
- Para cada linha, separe em dois inteiros
e . - Se
faça break. - Calcule
e (em Python usamos //para divisão inteira). - Imprima
S.
Resposta
# Programa que lê pares (m, n) e imprime a soma dos inteiros entre m e n inclusive
# Termina quando encontra um par com m >= n
import sys
for line in sys.stdin:
line = line.strip()
if not line:
continue
parts = line.split()
if len(parts) < 2:
continue
m, n = map(int, parts[:2])
if m >= n:
break
k = n - m + 1
total = k * (m + n) // 2
print(total)