Avatar ·

Cómo determinar rápidamente si la raíz cuadrada de un número entero es un número entero en Java

¡Hola a todos! Soy un desarrollador Java principiante y me encontré con una tarea: necesito verificar si la raíz cuadrada de un número entero es un número entero (es decir, un cuadrado perfecto). Por ejemplo, para 16 la respuesta es true (4), para 20 — false. Escribí un método simple con un bucle, pero funciona lento para números grandes (por ejemplo, 10^12). Probé Math.sqrt(), pero temo errores de redondeo de double. Aquí está mi código actual: ```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; } ``` Funciona, pero para n = 2_147_483_647 (el máximo int) el bucle realiza ~46340 iteraciones, lo cual es lento. He oído que se puede usar búsqueda binaria o trucos con números de punto flotante. Pero, ¿cómo hacerlo de manera confiable y rápida? Necesito una solución que funcione para todos los int (incluyendo negativos) y que no falle debido a double. ¡Por favor, indíquenme la forma óptima! <<>>

Problema