এই সমস্যায়, আমাদের একটি সংখ্যা N দেওয়া হয়েছে। আমাদের কাজ হলো সংখ্যাটির পঞ্চমমূলের ফ্লোর ভ্যালু বের করা।
পঞ্চমমূল (Fifth Root) হলো এমন একটি সংখ্যা যা নিজের সাথে ৫ বার গুণ করলে মূল সংখ্যাটি পাওয়া যায়।
যদি N1/5 = a হয়, তবে a × a × a × a × a = N।
উদাহরণ দিয়ে সমস্যাটি বোঝা যাক
ইনপুট: N = 325
আউটপুট: 3
ব্যাখ্যা: 325-এর পঞ্চমমূল হলো 3.179, যার ফ্লোর ভ্যালু ৩।
সমাধানের পদ্ধতি
এই সমস্যার একটি সহজ সমাধান হলো ১ থেকে n পর্যন্ত ট্রাভার্স করা। এবং সেই সংখ্যা খুঁজে বের করা যা নিজের সাথে ৫ বার গুণ করলে মূল সংখ্যাটি দেয়।
এখানে, সঠিক মান সবসময় পাওয়া যাবে না কারণ সব সংখ্যা পurno পঞ্চম ঘাত হয় না। তাই আমরা প্রথমে সেই মান খুঁজে বের করব যেটার পঞ্চম ঘাত n-এর চেয়ে বড়, তারপর value - 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