কম্পিউটার টিউটোরিয়াল

পাইথনে রেঞ্জের সব নম্বরের বিটওয়াইজ AND বের করা

দুটি সংখ্যা start এবং end দেওয়া আছে। রেঞ্জ [start, end]-এর সব নম্বরের বিটওয়াইজ AND বের করুন।

ইনপুট উদাহরণ

start = 8, end = 12

আউটপুট: 8 (বাইনারি: 1000 AND 1001 AND 1010 AND 1011 AND 1100 = 1000)

অ্যালগরিদম

  1. n = end - start + 1 (রেঞ্জের সাইজ)।
  2. বিট ৩১ থেকে ০ পর্যন্ত চেক করুন: যদি 2^b < n হয়, তবে সেই বিট এবং নিচের বিটগুলোর AND = ০ হবে।
  3. যদি start এবং end উভয়েই বিট সেট থাকে, তবে রেজাল্টে সেট করুন।

পাইথন কোড

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

# টেস্ট
print(solve(8, 12))  # 8

ব্যাখ্যা

রেঞ্জের সাইজ n যদি 2^b-এর চেয়ে বড় হয়, তবে বিট b অবশ্যই ০ হবে (কারণ সাইকেল পুরো হয়ে যাবে)। শুধু কমন প্রিফিক্স বিটগুলো ১ থাকে।

  1. পাইথনে নির্দিষ্ট রেঞ্জে র‍্যান্ডম নম্বর জেনারেট করে লিস্টে স্টোর করা

  2. পাইথনে দেয়া রেঞ্জের সাথে নম্বরের লিস্ট তৈরি করুন

  3. পাইথন প্রোগ্রাম: দেওয়া সংখ্যা পর্যন্ত ৩ এবং ৫ দ্বারা বিভাজ্য সব সংখ্যা প্রিন্ট করা

  4. পাইথনে নির্দিষ্ট পরিসরে র‍্যান্ডম সংখ্যা জেনারেট করে লিস্টে সংরক্ষণ করার প্রোগ্রাম