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
No answers yet.
Inicia sesión para dejar una respuesta
Blogs
Manejo de errores en Java: try/catch y más allá — guía completa