ধরুন আমাদের দুটি মান আছে শুরু এবং শেষ, আমাদের পরিসরে [শুরু, শেষ] (উভয়ই অন্তর্ভুক্ত) সমস্ত সংখ্যার বিটওয়াইজ AND খুঁজে বের করতে হবে।
সুতরাং, ইনপুটটি যদি start =8 end =12 এর মত হয়, তাহলে আউটপুট হবে 8 হল 1000 বাইনারিতে এবং 12 হল 1100 বাইনারিতে, তাই 1000 AND 1001 AND 1010 AND 1011 AND 1100 হল 1000 যা 8.
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- n :=শেষ - শুরু + 1
- x :=0 31 থেকে 0 রেঞ্জের b-এর জন্য
- , 1 কমিয়ে
- করুন
- যদি 2^b
- লুপ থেকে বেরিয়ে আসুন
- যদি 2^b
- যদি 2^b এবং শুরু এবং শেষ অ-শূন্য হয়, তাহলে
- x :=x + (2^b)
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
def solve(start, end): n = end - start + 1 x = 0 for b in range(31, -1, -1): if (1 << b) < n: break if (1 << b) & start & end: x += 1 << b return x start = 8 end = 12 print(solve(start, end))
ইনপুট
8, 12
আউটপুট
8