দুটি রেশনাল নম্বর (ভগ্নাংশ আকারে p/q) দেওয়া আছে। তাদের মধ্যে বড়টি বের করতে হবে।
উদাহরণ
ইনপুট: rat1 = 5/4, rat2 = 3/2
5/4 = 1.253/2 = 1.5
আউটপুট: 3/2
অ্যালগরিদম: LCM দিয়ে কমন ডিনোমিনেটর
- হর দুটির LCM (লগারিদমিক কমন মাল্টিপল) বের করুন।
- প্রতিটি ভগ্নাংশকে সেই কমন হরে রূপান্তর করুন:
newNum = num * LCM / den। - নিউমেরেটরগুলো কমপেয়ার করুন — বড় নিউমেরেটরওয়ালা ভগ্নাংশই বড়।
C++ প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
int findLCM(int a, int b) {
return (a * b) / (__gcd(a, b));
}
void maxRational(int ratOneNum, int ratOneDen, int ratTwoNum, int ratTwoDen) {
int k = findLCM(ratOneDen, ratTwoDen);
int oneNum = ratOneNum * k / ratOneDen;
int twoNum = ratTwoNum * k / ratTwoDen;
if (oneNum > twoNum)
cout << ratOneNum << "/" << ratOneDen;
else
cout << ratTwoNum << "/" << ratTwoDen;
}
int main() {
int ratOneNum = 5, ratOneDen = 4;
int ratTwoNum = 3, ratTwoDen = 2;
cout << "The maximum of the two rational Numbers is ";
maxRational(ratOneNum, ratOneDen, ratTwoNum, ratTwoDen);
return 0;
}
আউটপুট
The maximum of the two rational Numbers is 3/2
ব্যাখ্যা
LCM(4,2) = 45/4 = 5/4(নিউমেরেটর ৫)3/2 = 6/4(নিউমেরেটর ৬)6 > 5→3/2বড়।__gcdGCC বিল্ট-ইন ফাংশন (C++17-এstd::gcd)।
বিকল্প: ক্রস মাল্টিপ্লিকেশন (LCM লাগে না)
// a/b vs c/d → a*d vs c*b
if (ratOneNum * ratTwoDen > ratTwoNum * ratOneDen)
// প্রথমটি বড়
else
// দ্বিতীয়টি বড়
এটি ফাস্টার এবং ওভারফ্লো রোধে long long ব্যবহার করুন।
কমপ্লেক্সিটি
- টাইম:
O(log min(den1,den2))(GCD-এর জন্য)। - স্পেস:
O(1)।