বাইনারি রিপ্রেজেন্টেশনে mটি ১ এবং m-1টি ০ থাকা এমন সবচেয়ে বড় সংখ্যা বের করতে হবে যা n চেয়ে ছোট।
প্যাট্রন: (2ᵐ - 1) * 2^(m-1) = 111...1000...0 (mটি ১, m-1টি ০)
উদাহরণ
ইনপুট: n = 654 → আউটপুট: 496
(৪৯৬ বাইনারি: 111110000 = ৫টি ১, ৪টি ০)
অ্যালগরিদম
bits = 2, result = 1।- লুপ:
val = (2^bits - 1) * 2^(bits-1)। val < nহলেresult = val।bits++করুন।
সি++ ইমপ্লিমেন্টেশন
#include <bits/stdc++.h>
using namespace std;
long long getLargestNumber(long long n) {
long long bits = 2, result = 1, val = 1;
while (val < n) {
val = ((1LL << bits) - 1) * (1LL << (bits - 1));
if (val < n) result = val;
bits++;
}
return result;
}
int main() {
long long n = 654;
cout << getLargestNumber(n) << endl; // 496
return 0;
}
আউটপুট
496