Cho hai giá trị x và y. Nhiệm vụ: tìm giá trị lớn hơn giữa x^(y^2) và y^(x^2).
Ví dụ:
Đầu vào: x = 4, y = 3
Đầu ra: 3^(4^2)
Giải thích:
x^(y^2) = 4^(3^2) = 4^9 = 262144
y^(x^2) = 3^(4^2) = 3^16 = 43046721
Phương pháp giải
Cách đơn giản là tính cả hai giá trị và so sánh, nhưng không hiệu quả với số lớn.
Cách tối ưu: dùng logarit tự nhiên (ln):
ln(x^(y^2)) = (y^2) * ln(x)
ln(y^(x^2)) = (x^2) * ln(y)
Chia cả hai cho (x^2)*(y^2) để so sánh:
ln(x) / (x^2) và ln(y) / (y^2)
Giá trị này nghịch biến với kết quả. Nếu x > y thì x^(y^2) < y^(x^2).
Chương trình minh họa
Ví dụ
#include <iostream>
using namespace std;
bool checkGreaterVal(int x, int y) {
if (x > y)
return false;
else
return true;
}
int main() {
int x = 3;
int y = 5;
cout << "The greater value is ";
if (checkGreaterVal(x, y))
cout << x << "^(" << y << "^2)";
else
cout << y << "^(" << x << "^2)";
return 0;
}
Kết quả
The greater value is 3^(5^2)