ধরুন আমাদের দুটি সংখ্যা x এবং y এবং একটি প্রদত্ত পরিসর (বাম, ডান) আছে। প্রদত্ত উভয় সংখ্যার বাম থেকে ডানে থাকা সমস্ত বিট একে অপরের পরিপূরক কিনা তা আমাদের পরীক্ষা করতে হবে। আমাদের মনে রাখতে হবে যে ডান থেকে বামে, তাই সর্বনিম্ন তাৎপর্যপূর্ণ বিটটিকে প্রথম অবস্থানে বিবেচনা করা হয়।
সুতরাং, যদি ইনপুটটি x =41 y =54 বাম =2 ডান =5 এর মত হয়, তাহলে আউটপুটটি True হবে, কারণ 41 এবং 54 এর বাইনারি উপস্থাপনা হল 101001 এবং 110110। x এবং y এর 2 থেকে 5 রেঞ্জের বিটগুলি হল "1001" এবং "0110" যা একে অপরের পরিপূরক।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- তাপ :=x XOR y
- টেম্পের রেঞ্জের (বাম, ডানে) সমস্ত বিট 1 হলে সত্য প্রত্যাবর্তন করুন, অন্যথায় মিথ্যা
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
def are_all_setbits_in_range(n, left, right): val = ((1 << right) - 1) ^ ((1 << (left - 1)) - 1) new_value = n & val if val == new_value: return True return False def solve(x, y, left, right): temp = x ^ y return are_all_setbits_in_range(temp, left, right) x = 41 y = 54 left = 2 right = 5 print(solve(x, y, left, right))
ইনপুট
41, 54, 2, 5
আউটপুট
True