Faça um programa que leia um número não determinado de pares de valores [m, n], todos inteiros e positivos, um par de cada vez, e que calcule e mostre a soma de todos os números inteiros entre m e n (inclusive). A digitação de pares terminará quando m for maior ou igual a n.

Passo 1

O enunciado pede que a gente leia um número indefinido de pares de valores (m,n), ambos inteiros positivos, um par por vez, e para cada par calcule e mostre a soma de todos os inteiros entre m e n inclusive. A leitura de pares termina (o programa para) quando encontrarmos um par em que m seja maior ou igual a n. Lista clara do que foi dado e pedido:
  • Entrada: sequências de pares (m,n), um par por vez.
  • Condição de término: pare quando encontrar um par com m \ge n.
  • Saída: para cada par lido com m < n, imprimir a soma dos inteiros entre m e n inclusive.

Passo 2

Vamos entender claramente o que significa “soma de todos os inteiros entre m e n inclusive”. Se, por exemplo, m=3 e n=7, queremos
3+4+5+6+7.
Uma forma direta de fazer isso é somar termo a termo com um laço (loop): começar com um acumulador S=0, e para x indo de m até n fazer S \leftarrow S + x. Isso funciona e é simples de implementar, mas pode ser lento se n-m 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 a_1 e o último termo a_k. Para a nossa soma:
  • a_1 = m
  • a_k = n
  • o número de termos é k = n - m + 1
A soma S de uma progressão aritmética com k termos, primeiro termo a_1 e último termo a_k é
S = \frac{k\,(a_1 + a_k)}{2}.
Aplicando ao nosso caso:
S = \frac{(n - m + 1)\,(m + n)}{2}.
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 m+n. Há k termos, ou seja, k/2 pares (se k 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 m=3 e n=7,
k = 7-3+1 = 5,
então
S = \frac{5\,(3+7)}{2} = \frac{5\cdot 10}{2} = \frac{50}{2} = 25,
que bate com 3+4+5+6+7 = 25.
Observação importante sobre inteiros: o produto (n-m+1)\,(m+n) é sempre par, então a divisão por 2 dá um inteiro. Isso porque ou k=n-m+1 é par ou m+n é par.

Passo 5

Como o enunciado pede para processar vários pares até a condição de parada m \ge n, o esquema do programa (pseudocódigo) fica assim:
  1. Repetir:
    a. Ler um par (m,n).
    b. Se m \ge n então encerrar o processamento (não imprimir nada para esse par).
    c. Caso contrário, calcular k = n - m + 1 e S = \dfrac{k\,(m+n)}{2}.
    d. Imprimir S.
  2. Fim.
Nota: se a entrada terminar por EOF antes de aparecer um par com m \ge n, 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 \mathcal{O}(n-m) por par, enquanto a fórmula faz em tempo constante \mathcal{O}(1) 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
Processamento:
  • Para (3,7): m=3 < n=7 k=5 S=\dfrac{5(3+7)}{2}=25 → imprime \,25.
  • Para (2,2): m=2 \ge n=2 → 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 m e n.
  • Se m \ge n faça break.
  • Calcule k = n - m + 1 e S = k*(m+n)//2 (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)

Exercícios relacionados