संभव डुप्लिकेट:
Fastest way to determine if an integer's square root is an integerयह निर्धारित करने के लिए एक अच्छा एल्गोरिदम क्या है कि कोई इनपुट एक पूर्ण वर्ग है या नहीं?
क्या होगा यदि एक नंबर एक perfect square है देखने का कोई तरीका है?
bool IsPerfectSquare(long input)
{
// TODO
}
मैं सी # का उपयोग कर रहा है, लेकिन इस नास्तिक भाषा है।
स्पष्टता और सादगी के लिए बोनस अंक (यह कोड-गोल्फ नहीं है)।
संपादित करें: यह और अधिक जटिल हो गया मेरी अपेक्षा से! यह डबल परिशुद्धता वाले समस्याओं को स्वयं को दो तरीकों से प्रकट करता है। सबसे पहले, Math.Sqrt एक डबल लेता है जो ठीक से लंबे समय तक नहीं रख सकता (धन्यवाद जॉन)।
दूसरा, एक डबल की सटीकता छोटे मान (.000 ... 00001) खो जाएगी जब आपके पास एक विशाल, पूर्ण वर्ग के पास होगा। उदाहरण के लिए, मेरा कार्यान्वयन Math.Pow (10,18) +1 (मेरा सत्य सत्य) के लिए इस परीक्षण में विफल रहा।
आप पूर्णांक वर्ग रूट के लिए उपयोग की जाने वाली 'lsqrt' विधि के लिए भी Google पर जा सकते हैं। – leppie
माइकल, बिल द लिज़र ने एक अच्छा मुद्दा बना दिया कि यह एक समान प्रश्न है, सटीक डुप्लिकेट नहीं। मुझे नहीं लगता कि सवाल बंद होना चाहिए। सही वर्ग की समस्या के अलावा व्यावहारिक शर्तों में यह अधिक जटिल है और ऐसा लगता है कि यहां कुछ योगदान दिए गए हैं। –
आपके द्वारा चुने गए समाधान के लिए, नकारात्मकता के लिए त्वरित जांच पूर्ववत करना न भूलें। – angus