এই সমস্যায়, আমাদের একটি সংখ্যা দেওয়া হয়েছে। আমাদের কাজ হল সংখ্যাটির ডানদিকের বিটটির সূচী প্রিন্ট করা।
সমস্যাটি বোঝার জন্য একটি উদাহরণ দেওয়া যাক,
ইনপুট৷ − 4
আউটপুট − 3
ব্যাখ্যা − 4-এর বাইনারি হল 100, ডানদিকের সেটের বিটের সূচক হল 3৷
এই সমস্যাটি সমাধান করার জন্য, একটি সহজ সমাধান হল সংখ্যাটি পরিবর্তন করা যতক্ষণ না একটি সেট বিট সম্মুখীন হয় তবে সংখ্যাটি বড় হলে এটি অনেক গণনা করতে পারে।
একটি আরও দক্ষ সমাধান বুলিয়ান বীজগণিত ব্যবহার করা হবে। এর জন্য আমরা প্রথমে সংখ্যাটির 2 এর পরিপূরক গণনা করব, এটি প্রথম সেট বিটটিকে আগের মতো রেখে সংখ্যার সমস্ত বিট ফ্লিপ করবে। তারপরে আমরা বিট-ওয়াইজ এবং সংখ্যার গণনা করব এবং এটি 2 এর পরিপূরক। এটি শুধুমাত্র একটি সেট বিট সহ একটি সংখ্যা এবং আমরা চাই অবস্থানের ফলাফল হবে. সমাধানটি +1 নম্বরের লগ 2 দ্বারা দেওয়া হবে।
এটি বোঝার জন্য কিছুটা জটিল বলে মনে হচ্ছে আসুন এই পদ্ধতিটি ব্যবহার করে একটি উদাহরণ সমাধান করি।
N= 10 , binary = 1010 2’s complement, 0101 1010 & 0101 = 0010 log2(2) = 1 1+1 = 2 which is the given index.
উদাহরণ
আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম,
#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