Wie schnell prüfen, ob die Quadratwurzel einer ganzen Zahl eine ganze Zahl ist?
Hallo zusammen! Ich bin ein Java-Anfänger und bin auf eine Aufgabe gestoßen: Ich muss feststellen, ob die Quadratwurzel einer ganzen Zahl eine ganze Zahl ist (d.h. die Zahl ist ein perfektes Quadrat). Zum Beispiel: 25 — ja (5), 26 — nein.
Zuerst habe ich so geschrieben:
```java
public static boolean isPerfectSquare(int n) {
double sqrt = Math.sqrt(n);
return sqrt == Math.floor(sqrt);
}
```
Aber dann dachte ich: Was ist, wenn dies aufgrund von double-Ungenauigkeiten für große Zahlen falsch funktioniert? Zum Beispiel für n = 2147483647 (maximaler int) oder nahe der Grenzen. Vielleicht ist es besser, Integer-Arithmetik zu verwenden? Aber wie?
Ich habe es mit einer Schleife versucht:
```java
for (int i = 1; i * i <= n; i++) {
if (i * i == n) return true;
}
return false;
```
Aber das ist für große n schrecklich langsam. Gibt es einen schnelleren Weg? Im Internet habe ich Erwähnungen von binärer Suche gesehen, bin mir aber nicht sicher, wie ich sie anwenden soll. Ich brauche es speziell für Java und es soll für alle int von 0 bis Integer.MAX_VALUE funktionieren. Bitte sagt mir den schnellsten Weg.