इस समस्या में, हमें एक संख्या N दी गई है। हमारा कार्य संख्या के पांचवें मूल का फ्लोर मान ढूंढना है।
पांचवां मूल एक संख्या का वह संख्या है जिसे स्वयं से 5 बार गुणा करने पर वह संख्या प्राप्त होती है।
यदि N1/5 = a तो, a*a*a*a*a = N।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: 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