Avatar ·

Como verificar rapidamente se a raiz quadrada de um inteiro é um inteiro?

Olá a todos! Sou um desenvolvedor Java iniciante e me deparei com uma tarefa: preciso determinar se a raiz quadrada de um número inteiro é um inteiro (ou seja, o número é um quadrado perfeito). Por exemplo, 25 — sim (5), 26 — não. Primeiro, escrevi assim: ```java public static boolean isPerfectSquare(int n) { double sqrt = Math.sqrt(n); return sqrt == Math.floor(sqrt); } ``` Mas depois pensei: e se devido a imprecisões do double isso funcionar incorretamente para números grandes? Por exemplo, para n = 2147483647 (o máximo int) ou próximo dos limites. Talvez seja melhor usar aritmética inteira? Mas como? Tentei com um loop: ```java for (int i = 1; i * i <= n; i++) { if (i * i == n) return true; } return false; ``` Mas isso é terrivelmente lento para n grandes. Existe uma maneira mais rápida? Vi na internet menções sobre busca binária, mas não tenho certeza de como aplicá-la. Preciso disso especificamente para Java, e que funcione para todos os int de 0 a Integer.MAX_VALUE. Por favor, me digam o mais rápido