কম্পিউটার টিউটোরিয়াল

C++-এ XOR স্মলার ভ্যালু: x-র চেয়ে ছোট যাদের XOR x-র চেয়ে বড়

একটি পূর্ণসংখ্যা x দেওয়া আছে। x-র চেয়ে ছোট কতগুলো পূর্ণসংখ্যা y আছে যাতে y XOR x > x?

XOR সত্য টেবিল

ABA XOR B
000
101
011
110

উদাহরণ

x = 11 (1011)

y = 1..10 যাচাই করলে: 4,5,6,7 এর XOR 11-র চেয়ে বড়। মোট 4টি।

বিটম্যানিপুলেশন লজিক

y XOR x > x হলে y-র সেই বিটগুলো ১ হবে যেখানে x-র বিট ০। কারণ XOR-এ ০^১=১ হয়ে মান বাড়ায়।

সুতরাং, x-র ০ বিটগুলোতে যেকোনো কম্বিনেশন দিলে যাবতীয় সংখ্যা তৈরি হবে।

সূত্র

যদি x-র বাইনারি রিপ্রেজেন্টেশনে kটি ০ বিট থাকে (MSB 제외한), তবে উত্তর = 2^k - 1।

C++ বাস্তবায়ন

#include <bits/stdc++.h>
using namespace std;

int XOR_smaller(int x) {
    int count = 0, num = 1;
    while (x != 0) {
        if ((x & 1) == 0)  // বিট 0 হলে
            count += num;
        num <<= 1;
        x >>= 1;
    }
    return count;
}

int main() {
    int x = 20;
    cout << "Count: " << XOR_smaller(x);
    return 0;
}

উদাহরণ x=20 (10100)

বিট: 1 0 1 0 0 (পজিশন 4,3,2,1,0)

০ বিটগুলো: পজিশন 3, 1, 0 → ৩টি

উত্তর = 2³ - 1 = 7? না, কোড অনুযায়ী: 1<<3 + 1<<1 + 1<<0 = 8+2+1 = 11।

আউটপুট: 11

  1. C++-এ সেই প্রাকৃতিক সংখ্যাগুলো বের করা যাদের সব পারমুটেশন সংখ্যাটির চেয়ে বড় বা সমান

  2. C++-এ সর্টেড ম্যাট্রিক্সে x-র চেয়ে ছোট বা সমান উপাদান গণনা

  3. C++-এ দেওয়া XOR সমান হয় এমন জোড়া (Pair) গণনা

  4. C++-এ 'a' সংখ্যা 'b'-র চেয়ে বেশি হয় এমন প্রিফিক্সের সংখ্যা (Prefixes with More a than b)