এই সমস্যাতে, একটি সংখ্যা N দেওয়া আছে। আমাদের কাজ হলো সংখ্যার ডানপাশের সেট বিটের ইনডেক্স প্রিন্ট করা।
উদাহরণ:
ইনপুট - 4
আউটপুট - 3
ব্যাখ্যা - 4-এর বাইনারি 100, ডানপাশের সেট বিটের ইনডেক্স ৩।
সমাধানের জন্য, একটি সহজ সমাধান হবে সংখ্যাকে শিফ্ট করা যতক্ষণ না সেট বিট পাওয়া যায়, কিন্তু সংখ্যা বড় হলে এটি অনেক কম্পিউটেশন নিতে পারে।
একটি আরও দক্ষ সমাধান হবে বুলিয়ান বীজগণিত ব্যবহার করা। এর জন্য আমরা প্রথমে সংখ্যার ২-এর কমপ্লিমেন্ট বের করব, এটি সংখ্যার সব বিট ফ্লিপ করবে প্রথম সেট বিট ছাড়া। তারপর সংখ্যা এবং এর ২-এর কমপ্লিমেন্টের বিটওয়াইজ AND করব। এর ফলে শুধু একটি সেট বিট থাকবে এবং আমরা যে পজিশন চাই সেটি পাব। সমাধান হবে সংখ্যার log2 + 1।
এটি একটু জটিল মনে হতে পারে, চলুন এই পদ্ধতিতে একটি উদাহরণ সমাধান করি।
N= 10, binary = 1010 2's complement, 0101 1010 & 0101 = 0010 log2(2) = 1 1+1 = 2 যা চাকরি ইনডেক্স।
উদাহরণ
সমাধানের প্রোগ্রাম:
#include <iostream>
#include <math.h>
using namespace std;
void rightSetBit(int N) {
int bitIndex = log2(N & -N)+1;
cout << bitIndex;
}
int main() {
int N = 10;
cout << "The rightmost Set bit of the number " << N << " is : ";
rightSetBit(N);
return 0;
} আউটপুট
The rightmost Set bit of the number 10 is : 2