ধরুন আমাদের একটি ধনাত্মক সংখ্যা k আছে। আমাদের ধনাত্মক সংখ্যা n খুঁজে বের করতে হবে, যাতে n এবং n+1-এর XOR k-এর সমান হয়। সুতরাং k =7 (111) হলে, আউটপুট হবে 3। যেমন 3 (011), এবং 3 + 1 =4 (100), তাই 011 XOR 100 =111 (7)
দুটি সম্ভাব্য ক্ষেত্রে আছে. বিবেচনা করুন n সমান। n =0 এর শেষ বিট। তারপর n + 1 =1 এর শেষ বিট। বাকি বিটগুলো একই। সুতরাং XOR হবে 1, যখন n বিজোড়, শেষ বিট 1 এবং n + 1 বিটের শেষ বিট 0। তবে এই ক্ষেত্রে, আরও বিট যা বহন করার কারণে আলাদা। আমরা প্রথম 0 বিট না পাওয়া পর্যন্ত ক্যারিটি বাম দিকে প্রচার করতে থাকে। সুতরাং n XOR n + 1, হবে 2^i -1, যেখানে i বাম দিক থেকে n এ প্রথম 0 বিটের অবস্থান। তাই আমরা বলতে পারি যে k এর আকার 2^i – 1 হলে উত্তর হবে k/2।
উদাহরণ
#include<iostream>
using namespace std;
int findNValue(int k) {
if (k == 1)
return 2;
if (((k + 1) & k) == 0)
return k / 2;
return -1;
}
int main() {
int k = 15;
cout << "The value of n is: " << findNValue(k);
} আউটপুট
The value of n is: 7