Avatar ·

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!