Avatar ·

كيف تتحقق بسرعة مما إذا كان الجذر التربيعي لعدد صحيح هو عدد صحيح؟

مرحبًا بالجميع! أنا مطور Java مبتدئ، واجهت مشكلة: أحتاج إلى تحديد ما إذا كان الجذر التربيعي لعدد صحيح هو عدد صحيح (أي أن الرقم مربع كامل). على سبيل المثال، 25 — نعم (5)، 26 — لا. في البداية كتبت هكذا: ```java public static boolean isPerfectSquare(int n) { double sqrt = Math.sqrt(n); return sqrt == Math.floor(sqrt); } ``` ولكن بعد ذلك فكرت: ماذا لو أن الأخطاء في double تجعل هذا يعمل بشكل غير صحيح للأعداد الكبيرة؟ على سبيل المثال، لـ n = 2147483647 (أقصى int) أو بالقرب من الحدود. ربما من الأفضل استخدام العمليات الحسابية الصحيحة؟ لكن كيف؟ جربت باستخدام حلقة: ```java for (int i = 1; i * i <= n; i++) { if (i * i == n) return true; } return false; ``` لكن هذا بطيء جدًا للأعداد الكبيرة. هل هناك طريقة أسرع؟ رأيت على الإنترنت إشارات إلى البحث الثنائي (binary search)، لكنني لست متأكدًا من كيفية تطبيقه. أحتاج هذا تحديدًا لـ Java، وأن يعمل لجميع int من 0 إلى Integer.MAX_VALUE. من فضلكم، أخبروني بأسرع ط