इस समस्या में, हमें एक संख्या N दी जाती है। हमारा कार्य किसी संख्या के पांचवें मूल का न्यूनतम मान ज्ञात करना है।
पांचवां मूल किसी संख्या का वह संख्या है जिसे स्वयं से 5 बार गुणा करने पर वह संख्या वापस आ जाती है।
अगर एन 1/5 =ए तो, a*a*a*a*a =N ।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: एन =325
आउटपुट: 3पी>
स्पष्टीकरण:
325 का पाँचवाँ मूल 3.179 है जिसका न्यूनतम मूल्य 3 है।
समाधान दृष्टिकोण:
समस्या का एक सरल समाधान 1 से n तक जाना है। और वह संख्या ज्ञात करना जिसे स्वयं से पांच बार गुणा करने पर संख्या प्राप्त होती है।
यहां, सटीक मान नहीं पाया जा सकता है क्योंकि संख्याएं हमेशा पांचवीं शक्ति पूर्ण नहीं होंगी। तो, हम पहला मान पाएंगे जो पांचवीं शक्ति को n से अधिक बनाता है और फिर मान -1 को मंजिल पांचवीं जड़ प्राप्त करने के लिए वापस कर देता है।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include<iostream> using namespace std; int calcFifthRoot(int n) { if (n == 0 || n == 1) return n; int a = 0; for(a = 1; a*a*a*a*a < n ; a++){ } return (a - 1); } int main() { int n = 325; cout<<"The Floor of fifth root of "<<n<<" is "<<calcFifthRoot(n); return 0; }
आउटपुट -
The Floor of fifth root of 325 is 3
यह एल्गोरिथम अच्छा है लेकिन समस्या का अधिक आशाजनक समाधान हो सकता है। यह खोज एल्गोरिथम को अपडेट करके और बाइनरी सर्च . का उपयोग करके किया जा सकता है एल्गोरिथम संख्या का पाँचवाँ मूल खोजने के लिए।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला कार्यक्रम,
उदाहरण
#include<iostream> using namespace std; int calcFifthRoot(int n) { if (n == 0 || n == 1) return n; int start = 1, end = n, root = 0; while (start <= end) { int a = (start + end) / 2; long int apowfive = a*a*a*a*a; if (apowfive == n) return a; if (apowfive < n) { start = a + 1; root = a; } else end = a - 1; } return root; } int main() { int n = 250; cout<<"The floor of fifth root of "<<n<<" is "<<calcFifthRoot(n); return 0; }
आउटपुट -
The floor of fifth root of 250 is 3