সমস্যা বিবরণ
একটি অনসাইনড সংখ্যা দেওয়া আছে, সেই সংখ্যার বিট ব্যবহার করে তৈরি হওয়া ন্যূনতম সংখ্যা বের করুন।
উদাহরণ
ইনপুট = 10 হলে উত্তর ৩।
১০-এর বাইনারি রিপ্রেজেন্টেশন ১০১০ এবং ২টি সেট বিট দিয়ে ন্যূনতম সংখ্যা ০০১১ অর্থাৎ ৩।
অ্যালগরিদম
1. সেট বিটের সংখ্যা গণনা করুন। 2. (সেট বিটের সংখ্যা) ^ 2 - 1 ন্যূনতম সংখ্যা দেবে।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
int getSetBits(int n) {
int cnt = 0;
while (n) {
++cnt;
n = n & (n - 1);
}
return cnt;
}
int getMinNumber(int n){
int bits = getSetBits(n);
return pow(2, bits) - 1;
}
int main() {
int n = 10;
cout << "Minimum number = " << getMinNumber(n) << endl;
return 0;
}
উপরের প্রোগ্রাম কম্পাইল ও এক্সিকিউট করলে নিচের আউটপুট জেনারেট হবে
আউটপুট
Minimum number = 3