Questão 6: Crie uma função soma_quadrados ( n ) que retorne a soma de todos os quadrados perfeitos (1,4,9,16 \ldots) que sejam menores que n . (O resultado é um único número, não uma lista).
Exemplo: soma_quadrados (30) deve retornar 1+4+9+16+25=55.

Passo 1

O enunciado pede que eu crie uma função chamada soma_quadrados que recebe um número inteiro n e retorne a soma de todos os quadrados perfeitos menores que n. As informações relevantes são:
  • Entrada: um número inteiro n.
  • Queremos somar os quadrados perfeitos 1,4,9,16,\dots que satisfazem k^2 < n.
  • Resultado: um único número (a soma), não uma lista.
  • Exemplo dado: para n=30 a soma deve ser 1+4+9+16+25=55.

Passo 2

Entendendo o que é um quadrado perfeito (aula rápida): um número é quadrado perfeito quando ele pode ser escrito como o quadrado de um inteiro. Ou seja, q é quadrado perfeito se existe um inteiro k tal que q=k^2. Exemplos: 1=1^2, 4=2^2, 9=3^2, 16=4^2, 25=5^2, etc.
Se queremos todos os quadrados perfeitos menores que n, estamos procurando todos os inteiros k\ge 1 tais que
k^2 < n.
O conjunto desses k é k=1,2,\dots,m, onde m é o maior inteiro que satisfaz m^2<n. Em outras palavras, m=\lfloor\sqrt{n-1}\rfloor (ou equivalentemente o maior inteiro com m^2<n).

Passo 3

Escolha do método: vou apresentar dois jeitos (um simples para implementar à mão na prova e um um pouco mais “matemático” e rápido).
  1. Método direto (iterativo/loop): percorro k=1,2,\dots somando k^2 enquanto k^2<n. Este método é simples, não exige fórmulas e é fácil de implementar sem erros.
  2. Método fechado (fórmula): se m é o maior inteiro com m^2<n, existe uma fórmula conhecida para a soma dos primeiros m quadrados:
\sum_{k=1}^{m} k^2 = \frac{m(m+1)(2m+1)}{6}.
Nesse método basta calcular m e aplicar a fórmula — é O(1) em tempo, mas precisa lembrar a fórmula e calcular m corretamente.
Pela regra do nosso algoritmo de escolha (usar métodos mais básicos primeiro), vou priorizar o método iterativo na implementação principal porque é elementar e robusto; depois mostro a versão com a fórmula como alternativa eficiente.

Passo 4

Descrevendo passo a passo o método iterativo (a forma que eu faria na prova se não quiser arriscar erro com fórmulas):
  • Inicializo um acumulador S=0.
  • Faço k=1.
  • Enquanto k^2 < n: faço S \leftarrow S + k^2 e k \leftarrow k+1.
  • Quando k^2 \ge n eu paro e retorno S.
Explicação das variáveis:
  • n: entrada (limite superior, não incluso).
  • k: índice dos quadrados perfeitos k^2.
  • S: soma acumulada dos quadrados menores que n.
Esse procedimento garante que somamos exatamente os quadrados 1^2,2^2,\dots,m^2 com m^2<n.

Passo 5

Atenção a casos particulares (detalhes importantes para não errar na prova):
  • Se n\le 1, não existe quadrado perfeito positivo menor que n. Logo a soma deve ser 0.
  • Se n for pequeno, o loop termina rápido porque já 1^2=1 pode ser maior ou igual a n.
  • A condição do loop deve ser estrita k^2 < n, pois se k^2=n esse quadrado não deve ser contado (o enunciado pede "menores que n").

Passo 6

Versão alternativa com fórmula (útil de conhecer e usar se tiver boa precisão aritmética):
  • Primeiro calculo m=\lfloor\sqrt{n-1}\rfloor (o maior inteiro com m^2<n).
  • Uso a fórmula
\sum_{k=1}^{m} k^2 = \frac{m(m+1)(2m+1)}{6}.
  • Retorno esse valor.
    Exemplo rápido: para n=30 temos m=\lfloor\sqrt{29}\rfloor=5 e
\frac{5\cdot 6\cdot 11}{6}=55,
que bate com 1+4+9+16+25.

Passo 7

Complexidade (explicando sem jargões difíceis): no método iterativo você faz um passo por cada k até m, e m é aproximadamente \sqrt{n}. Portanto o número de operações cresce na ordem de \sqrt{n}. No método com fórmula você faz um número fixo de operações independentemente de n, então é muito mais rápido para n grande, mas exige a fórmula e que você calcule m corretamente.

Passo 8

Exemplo prático passo a passo com o método iterativo para n=30:
  • k=1: 1^2=1<30 \Rightarrow S=1.
  • k=2: 2^2=4<30 \Rightarrow S=1+4=5.
  • k=3: 3^2=9<30 \Rightarrow S=5+9=14.
  • k=4: 4^2=16<30 \Rightarrow S=14+16=30.
  • k=5: 5^2=25<30 \Rightarrow S=30+25=55.
  • k=6: 6^2=36\ge 30 → paro e retorno S=55.
    Isso coincide com o exemplo do enunciado.

Passo 9

Implementação prática (explicação do que o código faz, linha a linha, para você poder escrever na prova):
  • Defina a função soma_quadrados(n).
  • Trate o caso n\le 1 retornando 0.
  • Use um acumulador s = 0 e um índice k = 1.
  • Enquanto k*k < n: faça s += k*k e k += 1.
  • No final retorne s.

Resposta

def soma_quadrados(n):
if n <= 1:
return 0
s = 0
k = 1
while k * k < n:
s += k * k
k += 1
return s