Como determinar rapidamente se a raiz quadrada de um número inteiro é um número inteiro em Java?
Olá a todos! Sou um desenvolvedor Java iniciante e me deparei com uma tarefa: preciso verificar se a raiz quadrada de um número inteiro é um número inteiro (ou seja, um quadrado perfeito). Por exemplo, para 16 a resposta é true (4), para 20 — false.
Escrevi um método simples com um loop, mas ele funciona lentamente para números grandes (por exemplo, 10^12). Tentei Math.sqrt(), mas tenho medo de erros de arredondamento do double. Aqui está meu código atual:
```java
public static boolean isPerfectSquare(int n) {
if (n < 0) return false;
for (int i = 0; i * i <= n; i++) {
if (i * i == n) return true;
}
return false;
}
```
Ele funciona, mas para n = 2_147_483_647 (o máximo int) o loop executa ~46340 iterações, o que é lento. Ouvi dizer que é possível usar busca binária ou truques com números de ponto flutuante. Mas como fazer isso de forma confiável e rápida? Preciso de uma solução que funcione para todos os int (incluindo negativos) e não cause falhas devido ao double. Por favor, indiquem a maneira ideal!