Avatar ·

जावा में किसी पूर्णांक का वर्गमूल पूर्णांक है या नहीं, यह जल्दी से कैसे निर्धारित करें?

सभी को नमस्कार! मैं एक शुरुआती Java डेवलपर हूँ, और मुझे एक समस्या का सामना करना पड़ा: यह जाँचना है कि किसी पूर्णांक का वर्गमूल एक पूर्णांक है या नहीं (यानी perfect square)। उदाहरण के लिए, 16 के लिए उत्तर true (4), 20 के लिए false। मैंने लूप के साथ एक सरल method लिखा, लेकिन यह बड़ी संख्याओं (जैसे 10^12) के लिए धीमा काम करता है। Math.sqrt() का प्रयोग किया, लेकिन double की rounding errors का डर है। यहाँ मेरा वर्तमान कोड है: ```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; } ``` यह काम करता है, लेकिन n = 2_147_483_647 (अधिकतम int) पर लूप ~46340 iterations करता है, जो धीमा है। मैंने सुना है कि binary search या floating-point numbers के tricks का उपयोग किया जा सकता है। लेकिन इसे विश्वसनीय और तेज़ कैसे बनाया जाए? ऐसा समाधान चाहिए जो सभी int (नकारात्मक सहित) के लिए काम करे और double के कारण विफल न हो। कृपया इष्टतम तरीका बताएं! <<>>

समस्या