Trong bài toán này, chúng ta được cho một số N. Nhiệm vụ của chúng ta là tìm giá trị sàn của căn thứ năm của một số.
Gốc thứ năm của một số là số khi nhân với chính nó 5 lần sẽ trả về số đó.
Nếu N 1/5 =a thì a * a * a * a * a =N .
Hãy lấy một ví dụ để hiểu vấn đề,
Đầu vào: N =325
Đầu ra: 3
Giải thích:
Căn thứ năm của 325 là 3,179 có giá trị sàn là 3.
Phương pháp tiếp cận giải pháp:
Một giải pháp đơn giản cho vấn đề là chuyển từ 1 đến n. Và tìm số khi nhân với chính nó năm lần sẽ cho ra số.
Ở đây, không thể tìm thấy giá trị chính xác vì các con số không phải lúc nào cũng là lũy thừa thứ năm hoàn hảo. Vì vậy, chúng ta sẽ tìm giá trị đầu tiên làm cho lũy thừa thứ năm nhiều hơn n và sau đó trả về giá trị -1 để lấy căn bậc năm.
Chương trình minh họa hoạt động của giải pháp của chúng tôi,
Ví dụ
#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; }
Đầu ra -
The Floor of fifth root of 325 is 3
Thuật toán này là tốt nhưng có thể có một giải pháp hứa hẹn hơn cho vấn đề. Điều này có thể được thực hiện bằng cách cập nhật thuật toán tìm kiếm và sử dụng Tìm kiếm nhị phân thuật toán để tìm kiếm căn thứ năm của số.
Chương trình minh họa hoạt động của giải pháp của chúng tôi,
Ví dụ
#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; }
Đầu ra -
The floor of fifth root of 250 is 3