Avatar ·

Cómo verificar rápidamente si la raíz cuadrada de un entero es un entero

¡Hola a todos! Soy un desarrollador Java principiante y me encontré con una tarea: necesito determinar si la raíz cuadrada de un entero es un entero (es decir, el número es un cuadrado perfecto). Por ejemplo, 25 — sí (5), 26 — no. Primero escribí esto: ```java public static boolean isPerfectSquare(int n) { double sqrt = Math.sqrt(n); return sqrt == Math.floor(sqrt); } ``` Pero luego pensé: ¿y si debido a errores de precisión de double esto funciona incorrectamente para números grandes? Por ejemplo, para n = 2147483647 (el máximo int) o cerca de los límites. ¿Quizás es mejor usar aritmética de enteros? ¿Pero cómo? Probé con un bucle: ```java for (int i = 1; i * i <= n; i++) { if (i * i == n) return true; } return false; ``` Pero esto es terriblemente lento para n grandes. ¿Hay alguna forma más rápida? En internet vi menciones sobre búsqueda binaria, pero no estoy seguro de cómo aplicarla. Lo necesito específicamente para Java, y que funcione para todos los int desde 0 hasta Integer.MAX_VALUE. Por favor, indíquenme la forma más rápida.