এই সমস্যায়, আমরা একটি পূর্ণসংখ্যা n দেওয়া হয়. আমাদের কাজ হল i =0 থেকে n পর্যন্ত পূর্ণসংখ্যার গণনা খুঁজে বের করার জন্য একটি প্রোগ্রাম তৈরি করা, যেখানে যোগফল XOR এর সমান অর্থাৎ (n+i) =(n^i)।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট: n =4
আউটপুট: 4
ব্যাখ্যা:
0 থেকে n,
পর্যন্ত i-এর সমস্ত মান বিবেচনা করে
i =0, 4 + 0 =4, 4^0 =4
i =1, 4 + 1 =5, 4^1 =5
i =2, 4 + 2 =6, 4^2 =6
i =3, 4 + 3 =7, 4^3 =7
i =4, 4 + 4 =8, 4^4 =0
গণনা =4
সমাধান পদ্ধতি:
একটি সহজ সমাধান হল n এবং i এর যোগফল এবং n এবং i এর xor এর মান বের করা। এই উভয় মানের তুলনা করুন এবং তারপর সেই মানগুলি গণনা করুন যার জন্য তারা সমান৷
অ্যালগরিদম:
ধাপ 1: i =0 থেকে n পর্যন্ত সকল মানের জন্য লুপ।
ধাপ 1.1: (n + i) এর মান খুঁজুন।
ধাপ 1.2: (n^i) এর মান খুঁজুন।
পদক্ষেপ 1.3: ধাপ 1.1 এবং 1.2 এ পাওয়া মানগুলির তুলনা করুন।
পদক্ষেপ 1.4: যদি তারা সমান হয়, সংখ্যা বাড়ান।
ধাপ 2: প্রিন্ট গণনা মান।
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,
উদাহরণ
#include <iostream> using namespace std; int main() { int n = 5; int counter = 0; for(int i=0; i<=n; i++ ) if ( (n+i) == (n^i) ) counter++; cout<<"The count of integers with equal sum and XOR is "<<counter; return 0; }
আউটপুট −
The count of integers with equal sum and XOR is 2
পদ্ধতিটি ভাল তবে তাদের সমস্যাটির আরও ভাল সমাধান হতে পারে, যা এই সত্যটি ব্যবহার করছে
যদি n^i =n+i হয় , তারপর n&i =0 .
যদি n&i =0 এর মান হয়, তার জন্য আমাদের দুটি সংখ্যার বিপরীত সেট এবং আনসেট বিট থাকতে হবে। এবং আমরা যেমন মান গণনা করা প্রয়োজন. এটি করার জন্য এখানে একটি প্রোগ্রাম রয়েছে,
উদাহরণ
#include <iostream> using namespace std; int countValuesWithEqualSumXOR(int n) { int countUnSetBits=0; while (n) { if ((n & 1) == 0) countUnSetBits++; n=n>>1; } return 1 << countUnSetBits; } int main() { int n = 6; cout<<"The count of integers with equal sum and XOR is "<<countValuesWithEqualSumXOR(n); return 0; }
আউটপুট −
The count of integers with equal sum and XOR is 2