এই সমস্যাতে, একটি পূর্ণসংখ্যা n দেওয়া থাকে। এর পূর্ববর্তী সংখ্যা (n-1) কি n-এর ১'র কমপ্লিমেন্ট (1's complement) এর সমান কিনা তা চেক করতে হবে।
উদাহরণ
n = 12 (1100₂) → পূর্ববর্তী 11 (1011₂) → 1's complement of 12 = 0011₂ → নয়
n = 4 (100₂) → পূর্ববর্তী 3 (011₂) → 1's complement of 4 = 011₂ → হ্যাঁ
গাণিতিক পর্যবেক্ষণ
শুধু ২-এর ঘাতসংখ্যা (powers of 2) এর জন্য এটি সত্য হয়। কারণ ২^k এর বাইনারি: 1000...0 (kটি ০)। এর ১'র কমপ্লিমেন্ট: 0111...1 (kটি ১) = 2^k - 1 = পূর্ববর্তী সংখ্যা।
বিটওয়াইজ চেক
n & (n-1) == 0 হলে n হলো ২-এর ঘাত।
C++ প্রোগ্রাম উদাহরণ
#include <iostream>
using namespace std;
bool sameBits(unsigned long int n) {
if ((n & (n - 1)) == 0) return true;
return false;
}
int main() {
unsigned long int n = 64;
if (sameBits(n))
cout << "Both are the same";
else
cout << "Both aren't the same";
return 0;
}
আউটপুট
Both are the same