এই সমস্যায়, আমরা একটি পূর্ণসংখ্যা 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