দুটি সংখ্যা x এবং y দেওয়া আছে। x^y এবং y^x — দুটোর মধ্যে কোনটি বড় সেটা বের করতে হবে।
উদাহরণ
ইনপুট: x = 4, y = 5
x^y = 4^5 = 1024y^x = 5^4 = 625
আউটপুট: 1024 (অর্থাৎ 4^5 বড়)
গাণিতিক সমাধান: লগারিদম
সরাসরি ঘাত ক্যালকুলেট করলে ওভারফ্লো। লগ নিন:
ln(x^y) = y · ln(x)ln(y^x) = x · ln(y)
দুটো কমপেয়ার করুন: y·ln(x) vs x·ln(y)। বড়টোই বড় ঘাত।
C++ প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
int main() {
double x = 3, y = 7;
double ylogx = y * log(x);
double xlogy = x * log(y);
if (ylogx > xlogy)
cout << x << "^" << y;
else if (ylogx < xlogy)
cout << y << "^" << x;
else
cout << "None";
cout << " has greater value";
return 0;
}
আউটপুট
3^7 has greater value
ব্যাখ্যা
log()= ন্যাচারেল লগ (বেস e)।3^7 = 2187,7^3 = 343→ ৩^৭ বড়।- ডাবল প্রিসিশন যথেষ্ট বড় রেঞ্জের জন্য।
- বিরল কেস:
x=2, y=4→2^4=16, 4^2=16(সমান)।
প্যাটার্ন (ইন্টিজার বেস)
x < yএবংx ≥ 3হলে সাধারণতx^y > y^x।(2,3): ২³=৮, ৩²=৯ → ৩^২ বড় (এক্সসেপশন)।(2,4): সমান।x=1: ১^y=১, y^1=y → y^x বড় (y>1 হলে)।
কমপ্লেক্সিটি
- টাইম:
O(1)— কনস্ট্যান্ট টাইম ম্যাথ অপারেশন। - স্পেস:
O(1)।