1¹. Questão: Número quadrado, em matemática, é um inteiro que pode ser escrito como o quadrado de outro número inteiro (Ex: 9 é quadrado, pois
). Ou ainda se a raiz quadrada de um número inteiro for outro número inteiro, o primeiro é um número quadrado. Sabendo disso, crie uma função que verifique se um número é quadrado ou não. Adicionalmente, faça a chamada da função para verificar os números 729 e 1444 .
Dica: para saber se uma variável
é inteira use
. is_integer()
Passo 1
O enunciado pede que eu crie uma função que verifique se um número é um número quadrado (ou seja, se existe um inteiro cujo quadrado é esse número) e que eu chame essa função para verificar os números
e
.
Informações relevantes fornecidas:
- Definição: um inteiro
é quadrado se existe um inteiro tal que . - Dica do enunciado: para saber se uma variável
(float) é inteira, usar .is_integer().
O que preciso entregar:
- Uma função (em Python) que recebe um número e retorna se ele é quadrado ou não.
- A chamada dessa função para os números
e , mostrando o resultado.
Passo 2
Entendendo a ideia matemática (a pequena “aula” necessária).
- Um número inteiro
é um quadrado perfeito se existe inteiro tal que . - Isso implica duas coisas práticas para checar:
-
deve ser inteiro e não-negativo (não faz sentido considerar números negativos como quadrados inteiros no conjunto dos inteiros). - A raiz quadrada de
, ou seja , deve ser um número inteiro.
-
- Em Python, uma forma direta (seguindo a dica) é computar
com math.sqrte testar.is_integer(). Se for True, então é quadrado perfeito. - Observação importante sobre precisão:
math.sqrtretorna um float e, por conta de arredondamento, às vezespode ser algo como em vez de . Por isso, existe um método robusto com math.isqrt(disponível no Python 3.8+) que calcula a raiz inteirade forma exata: então basta testar se . Vou mostrar ambas as versões (a que usa a dica e a versão robusta).
Passo 3
Vou construir primeiro a função seguindo exatamente a dica (usando
math.sqrt e is_integer()). Passo a passo do que a função fará:- Recebe um argumento
. - Verifica se
é um inteiro não-negativo (se não for, retorna False). - Calcula
com math.sqrt. - Verifica se
.is_integer() é True; se for, retorna True; caso contrário, False.
Exemplo de implementação em Python (seguindo a dica):
import math
def eh_quadrado_via_sqrt(n):
# aceita apenas inteiros não-negativos
if not isinstance(n, int) or n < 0:
return False
x = math.sqrt(n) # x é float
return x.is_integer() # True se x for inteiro (ex: 27.0)
Explicação linha a linha:
import math: importa o módulo que temsqrt.if not isinstance(n, int) or n < 0: garante queé inteiro e não-negativo; evita testar floats ou negativos. x = math.sqrt(n): calcula. return x.is_integer(): retorna True sefor um inteiro (exatamente ).
Passo 4
Agora a versão robusta (recomendada para provas e para evitar surpresas com precisão):
- Usa
math.isqrt(n)que retorna o maior inteirotal que . - Depois verifica se
. Isso é exato e opera só com inteiros, sem problemas de ponto flutuante.
Implementação robusta em Python:
import math
def eh_quadrado_exato(n):
# aceita apenas inteiros não-negativos
if not isinstance(n, int) or n < 0:
return False
k = math.isqrt(n) # k = floor(sqrt(n)) calculado exatamente
return k * k == n # True se k^2 == n
Explicação:
math.isqrt(n)devolvecomo inteiro, sem usar floats. - Se
, então é um quadrado perfeito; caso contrário não é.
Passo 5
Agora aplico a função aos números pedidos:
e
.
- Chamando a versão via
sqrt:
print(eh_quadrado_via_sqrt(729)) # resultado esperado: True
print(eh_quadrado_via_sqrt(1444)) # resultado esperado: True
- Chamando a versão exata:
print(eh_quadrado_exato(729)) # True
print(eh_quadrado_exato(1444)) # True
Cálculo mental rápido (para entender por que os resultados são True):
-
. Logo é quadrado perfeito. -
. Logo é quadrado perfeito.
Passo 6
Resumo prático (como fareias na prova):
- Se a questão permitir usar
math.isqrt, preferir esse método por ser exato: calculare checar se . - Se só puder usar raiz e
is_integer(), seguir a dica: calculare testar se o resultado é inteiro, lembrando de garantir que é inteiro e não-negativo antes.