Comment déterminer rapidement si la racine carrée d'un entier est un entier en Java ?
Bonjour à tous ! Je suis un développeur Java débutant et j'ai rencontré un problème : je dois vérifier si la racine carrée d'un entier est un entier (c'est-à-dire un carré parfait). Par exemple, pour 16, la réponse est true (4), pour 20 — false.
J'ai écrit une méthode simple avec une boucle, mais elle est lente pour les grands nombres (par exemple, 10^12). J'ai essayé Math.sqrt(), mais j'ai peur des erreurs d'arrondi du double. Voici mon code actuel :
```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;
}
```
Il fonctionne, mais pour n = 2_147_483_647 (int maximum), la boucle effectue ~46340 itérations, ce qui est lent. J'ai entendu dire qu'on pouvait utiliser la recherche binaire ou des astuces avec les nombres à virgule flottante. Mais comment faire cela de manière fiable et rapide ? J'ai besoin d'une solution qui fonctionne pour tous les int (y compris les négatifs) et qui ne cause pas d'erreurs à cause du double. Veuillez m'indiquer la méthode optimale !
<<>>