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

পাইথনে যে সাবসেটে যেকোনো জোড়া একটি অন্যটি দিয়ে বিভাজ্য সেটি খুঁজে বের করার প্রোগ্রাম

একটি ইউনিক সংখ্যার লিস্ট nums দেওয়া আছে। এমন সবচেয়ে বড় সাবসেট খুঁজে বের করতে হবে যাতে সেটির যেকোনো দুটি এলিমেন্ট (i, j) এর জন্য i%j==0 বা j%i==0 সত্য হয়। সাবসেটের আকার রিটার্ন করুন।

উদাহরণস্বরূপ, nums = [3, 6, 12, 24, 26, 39] হলে আউটপুট ৪, কারণ [3, 6, 12, 24] সবচেয়ে বড় বৈধ সাবসেট।

সমাধানের পদ্ধতি (DP on সর্টেড অ্যারে)

  1. nums সর্ট করুন।
  2. dp[i] = nums[i] দিয়ে শেষ হওয়া সবচেয়ে বড় বৈধ সাবসেটের আকার। সব ১ দিয়ে ইনিশিয়ালাইজ।
  3. i = 1..n-1, j = 0..i-1:
    • যদি nums[i] % nums[j] == 0: dp[i] = max(dp[i], dp[j] + 1)।
  4. max(dp) রিটার্ন করুন।

পাইথন কোড উদাহরণ

class Solution:
    def solve(self, nums):
        dp = [1] * len(nums)
        nums.sort()
        n = len(nums)
        if n <= 1:
            return n
        ans = 0
        for i in range(1, n):
            for j in range(i):
                if nums[i] % nums[j] == 0:
                    dp[i] = max(dp[i], dp[j] + 1)
            ans = max(ans, dp[i])
        return ans

ob = Solution()
nums = [3, 6, 12, 24, 26, 39]
print(ob.solve(nums))

ইনপুট

[3, 6, 12, 24, 26, 39]

আউটপুট

4
  1. পাইথনে 'নাইস' জোড়া वाले সাবসিকোয়েন্সের ম্যাক্সিমাম আকার বের করা

  2. পাইথনে n-ary ট্রি-তে সর্বোচ্চ পথ দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  3. পাইথন প্রোগ্রাম অ্যারেতে সবচেয়ে বড় এলিমেন্ট বের করা

  4. পাইথনে অ্যারে থেকে সর্বোচ্চ এলিমেন্ট বের করা