Questão 8: Crie uma função soma_multiplos_intervalo(a, b, k) que retorne a soma de todos os números no intervalo de a até b (inclusive) que são múltiplos de k .
Exemplo: soma_multiplos_intervalo(5, 20, 5) deve retornar 5+ 10+15+20=50.

Passo 1

O enunciado pede que a gente crie uma função chamada soma_multiplos_intervalo(a, b, k) que retorne a soma de todos os números no intervalo de a até b (inclusive) que são múltiplos de k.
Informações relevantes e pressupostos que vou usar (sem perguntar nada a você):
  • Os parâmetros a, b e k são inteiros.
  • O intervalo é fechado: inclui os extremos a e b.
  • Vou tratar o caso a>b trocando os valores para garantir que sempre percorremos do menor para o maior.
  • O caso k=0 é inválido (não faz sentido determinar múltiplos de zero), então vou indicar erro para isso.
    Exemplo dado no enunciado: chamada \text{soma\_multiplos\_intervalo}(5,20,5) deve retornar 5+10+15+20=50.

Passo 2

Vamos escolher o método de resolução. Existem basicamente dois jeitos naturais:
  1. Método direto (mais básico): percorrer todos os inteiros de a até b e somar os que satisfazem x \bmod k = 0. É simples e intuitivo — bom para programar rápido e entender o que está acontecendo.
  2. Método via progressão aritmética (mais eficiente): identificar o primeiro múltiplo de k dentro do intervalo e o último múltiplo, contar quantos termos há e usar a fórmula da soma de uma progressão aritmética. É matematicamente elegante e muito mais rápido quando o intervalo é grande.
Vou explicar ambos. Para a implementação final vou apresentar a versão eficiente (progressão), porque é curta, evita loops longos e é ótima para prova — mas antes eu ensino o método básico passo a passo (o que é mais fácil de memorizar e implementar se você só souber programação básica).

Passo 3

Conceito básico: como testar se um número x é múltiplo de k.
  • Definição: x é múltiplo de k se e somente se x \bmod k = 0.
  • O operador “mod” (resto) dá o resto da divisão inteira de x por k. Por exemplo, 14 \bmod 5 = 4 e 15 \bmod 5 = 0, logo 15 é múltiplo de 5.
    Método simples (passo a passo):
  1. Inicializo uma variável soma com 0.
  2. Para cada inteiro x de a até b (incluindo ambos), verifico se x \bmod k = 0.
  3. Se sim, faço soma := soma + x.
  4. No final, retorno soma.
Exemplo controlado com (a,b,k)=(5,20,5): os x de 5 a 20 que satisfazem x \bmod 5 = 0 são 5,10,15,20. Somando: 0+5=5, 5+10=15, 15+15=30, 30+20=50. Resultado 50.

Passo 4

Agora a versão rápida com progressão aritmética — aqui a matemática que você precisa saber e como aplicá-la na prova.
  1. Identificar o primeiro múltiplo de k dentro do intervalo [a,b]. Denoto esse valor por m_1. Fórmula:
m_1 = \left\lceil \frac{a}{k} \right\rceil \cdot k.
Isso significa: pegue o menor inteiro múltiplo de k que seja maior ou igual a a.
  1. Identificar o último múltiplo de k dentro do intervalo [a,b]. Denoto por m_n. Fórmula:
m_n = \left\lfloor \frac{b}{k} \right\rfloor \cdot k.
Isto é: o maior múltiplo de k que seja menor ou igual a b.
  1. Contar quantos termos há na sequência m_1, m_1+k, m_1+2k, \dots, m_n. Se m_1>m_n, então não há múltiplos no intervalo e a soma é 0. Caso contrário, o número de termos n é
n = \frac{m_n - m_1}{k} + 1.
Observe que n é inteiro por construção.
  1. Soma da progressão aritmética: a soma S dos n termos é
S = n \cdot \frac{m_1 + m_n}{2}.
Esse resultado vem da fórmula clássica da soma de progressão aritmética: soma = número de termos × (primeiro + último)/2.
Exemplo com (a,b,k)=(5,20,5):
m_1 = \left\lceil \frac{5}{5} \right\rceil \cdot 5 = 1\cdot 5 = 5,
m_n = \left\lfloor \frac{20}{5} \right\rfloor \cdot 5 = 4\cdot 5 = 20,
n = \frac{20-5}{5} + 1 = 3 + 1 = 4,
S = 4 \cdot \frac{5+20}{2} = 4 \cdot \frac{25}{2} = 4 \cdot 12{,}5 = 50.
(na prática S é inteiro porque (m_1+m_n)\cdot n é divisível por 2).

Passo 5

Casos especiais e detalhes práticos que você precisa lembrar na prova:
  • k=0: inválido; não existe “múltiplos de zero”. Deve-se tratar como erro.
  • k negativo: usar |k| (múltiplos de -5 ou de 5 são os mesmos em valor absoluto). Vou usar k \leftarrow |k|.
  • a>b: troque a e b, isto é, trabalhe com o intervalo ordenado [\min(a,b),\max(a,b)].
  • Se não houver múltiplos no intervalo (ou seja, m_1>m_n), retorne 0.

Passo 6

Vou dar a implementação final em Python (curta e eficiente) usando a abordagem da progressão aritmética. Essa função trata os casos especiais citados. Você pode implementar a versão por loop se preferir, mas essa é a que eu recomendo para prova por ser concisa e rápida.

Resposta

def soma_multiplos_intervalo(a, b, k):
import math
if k == 0:
raise ValueError(“k não pode ser zero”)
# normaliza k positivo e garante a <= b
k = abs(k)
if a > b:
a, b = b, a
# primeiro múltiplo >= a
m1 = math.ceil(a / k) * k
# último múltiplo <= b
mn = math.floor(b / k) * k
if m1 > mn:
return 0
n = (mn - m1) // k + 1
return n * (m1 + mn) // 2

Exercícios relacionados