Avatar ·

Comment vérifier rapidement si la racine carrée d'un entier est un entier ?

Bonjour à tous ! Je suis un développeur Java débutant et j'ai rencontré un problème : il faut déterminer si la racine carrée d'un entier est un entier (c'est-à-dire si le nombre est un carré parfait). Par exemple, 25 — oui (5), 26 — non. Au début, j'ai écrit ceci : ```java public static boolean isPerfectSquare(int n) { double sqrt = Math.sqrt(n); return sqrt == Math.floor(sqrt); } ``` Mais ensuite j'ai pensé : et si à cause des imprécisions du double cela fonctionnait mal pour les grands nombres ? Par exemple, pour n = 2147483647 (le maximum int) ou près des limites. Peut-être vaut-il mieux utiliser l'arithmétique entière ? Mais comment ? J'ai essayé avec une boucle : ```java for (int i = 1; i * i <= n; i++) { if (i * i == n) return true; } return false; ``` Mais c'est terriblement lent pour les grands n. Existe-t-il un moyen plus rapide ? J'ai vu des mentions de la recherche binaire sur Internet, mais je ne suis pas sûr de comment l'appliquer. J'ai besoin de cela spécifiquement pour Java, et que cela fonctionne pour tous les int de 0 à Integer.MAX_VALUE. S'il vous plaît, indiquez-moi la méthode la plus rapide.