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

পাইথনে n জন মানুষ দিয়ে লাইট ফ্লিপ করলে অন অবস্থায় থাকা লাইটের সংখ্যা বের করার প্রোগ্রাম

একটি সংখ্যা n দেওয়া আছে। ধরুন একটি রুমে nটি টগল সুইচ এবং nজন মানুষ আছে। মানুষগুলো নিম্নরূপ সুইচ ফ্লিপ করে:

  • ১ম মানুষ: সব সুইচ ফ্লিপ করে।
  • ২য় মানুষ: ২-এর গুণিতক সুইচ ফ্লিপ করে (২, ৪, ৬, ...)।
  • i-তম মানুষ: i-এর গুণিতক সুইচ ফ্লিপ করে।

শেষে কতটি সুইচ অন (ON) অবস্থায় থাকবে তা বের করুন।

উদাহরণ: n = 5 হলে আউটপুট 2।

শুরু:      [0, 0, 0, 0, 0]
১ম মানুষ: [1, 1, 1, 1, 1]
২য় মানুষ: [1, 0, 1, 0, 1]
৩য় মানুষ: [1, 0, 0, 0, 1]
৪র্থ মানুষ: [1, 0, 0, 1, 1]
৫ম মানুষ: [1, 0, 0, 1, 0]
শেষে ২টি অন।

গাণিতিক পর্যবেক্ষণ

একটি সুইচ k ততবার ফ্লিপ হবে যতটি k-এর ডিভাইজার আছে। ডিভাইজার সংখ্যা বিজোড় হলে সুইচ অন থাকবে। শুধু পারফেক্ট স্কয়ার সংখ্যাগুলোর ডিভাইজার বিজোড় হয়। তাই উত্তর = floor(sqrt(n))।

বাইনারি সার্চ সমাধান

def solve(n):
    l, r = 0, n
    while l <= r:
        mid = l + (r - l) // 2
        if mid * mid <= n < (mid + 1) * (mid + 1):
            return mid
        elif n < mid * mid:
            r = mid
        else:
            l = mid + 1

# টেস্ট
n = 5
print(solve(n))  # আউটপুট: 2

সরল সমাধান

import math
def solve(n):
    return int(math.isqrt(n))  # পাইথন ৩.৮+

# অথবা
def solve(n):
    return int(n ** 0.5)

সময় জটিলতা

O(log n) বাইনারি সার্চের জন্য, O(1) ম্যাথ ফাংশনের জন্য।

  1. পাইথনে ব্র্যাকেট ডেপথ অনুযায়ী ক্যারেক্টার কাউন্ট করা

  2. পাইথন প্রোগ্রাম - n নোড দিয়ে BST-এর সংখ্যা বের করুন

  3. পাইথনে বাইনারি ট্রিতে যেসব পথের যোগফল k তাদের সংখ্যা গুনার প্রোগ্রাম

  4. ফ্যাক্টোরিয়ালে ট্রেইলিং জিরোর সংখ্যা গণনা করার পাইথন প্রোগ্রাম