একটি পূর্ণসংখ্যা অ্যারে দেওয়া আছে। বিটওয়াইজ AND অপারেশনের ফলাফল বিজোড় (odd) হওয়া যোড়াগুলোর সংখ্যা গণনা করুন।
মূল লজিক
AND ফলাফল বিজোড় হলে দুটি অপারেন্ডই বিজোড় হতে হবে (LSB=1)।
সুতরাং: উত্তর = C(বিজোড়_কাউন্ট, 2) = বিজোড়_কাউন্ট × (বিজোড়_কাউন্ট - 1) / 2
C++ বাস্তবায়ন
#include
using namespace std;
int count_pair(int arr[], int size) {
int odd = 0;
for (int i = 0; i < size; i++)
if (arr[i] % 2 == 1) odd++;
return odd * (odd - 1) / 2;
}
int main() {
int arr[] = {2, 5, 1, 8, 9, 2, 7};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Odd AND pairs: " << count_pair(arr, size);
return 0;
}
উদাহরণ
অ্যারে: [2, 5, 1, 8, 9, 2, 7]
বিজোড়: 5, 1, 9, 7 (৪টি)
যোড়া: C(4,2) = 6টি
সময় জটিলতা
O(n) - একবার ট্রাভার্স। স্পেস O(1)।