कैसे जल्दी से जांचें कि किसी पूर्णांक का वर्गमूल पूर्णांक है या नहीं?
सभी को नमस्ते! मैं एक शुरुआती 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;
```
लेकिन यह बड़े n के लिए बहुत धीमा है। क्या कोई तेज़ तरीका है? मैंने इंटरनेट पर binary search का उल्लेख देखा, लेकिन यकीन नहीं है कि इसे कैसे लागू किया जाए। मुझे विशेष रूप से Java के लिए चाहिए, और यह 0 से Integer.MAX_VALUE तक सभी int के लिए काम करना चाहिए। कृपया मुझे सबसे तेज़ और विश्वसनीय तरीका बताएं।