কম্পিউটার

পাইথনে সর্বাধিক K-এ LCM বিশিষ্ট অ্যারের দীর্ঘতম অনুক্রম খুঁজুন


ধরুন আমাদের কাছে n ভিন্ন সংখ্যার একটি অ্যারে এবং আরেকটি ধনাত্মক পূর্ণসংখ্যা K আছে, আমাদের অ্যারের মধ্যে সবচেয়ে দীর্ঘতম সাব-সিকুয়েন্সটি খুঁজে বের করতে হবে যার মধ্যে Least Common Multiple (LCM) সর্বাধিক K থাকবে। LCM এবং সাবের দৈর্ঘ্য ফেরত দেওয়ার পরে -ক্রম, প্রাপ্ত উপ-অনুক্রমের উপাদানগুলির সূচী অনুসরণ করে (0 থেকে শুরু হয়)। অন্যথায়, -1 রিটার্ন করুন।

সুতরাং, যদি ইনপুট হয় A =[3, 4, 5, 6], K =20, তাহলে আউটপুট হবে LCM =12, দৈর্ঘ্য =3, সূচক =[0,1,3]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • n :=A

    এর আকার
  • my_dict :=একটি মানচিত্র

  • 0 থেকে n রেঞ্জের জন্য, করুন

    • my_dict[A[i]] :=my_dict[A[i]] + 1

  • গণনা :=আকারের একটি অ্যারে (k + 1) 0 দিয়ে পূরণ করুন

  • my_dict-এ প্রতিটি কী-এর জন্য করুন

    • যদি কী <=k, তারপর

      • i :=1

      • যখন কী * i <=k, do

        • গণনা [কী * i] :=গণনা[কী * i] + my_dict[কী]

        • i :=i + 1

    • অন্যথায়,

      • লুপ থেকে বেরিয়ে আসুন

  • lcm :=0, আকার :=0

  • 1 থেকে k + 1 রেঞ্জের জন্য, করুন

    • যদি গণনা [i]> আকার, তাহলে

      • আকার :=গণনা[i]

      • lcm :=i

  • যদি lcm 0 এর সমান হয়, তাহলে

    • রিটার্ন -1

  • অন্যথায়,

    • প্রদর্শন lcm এবং আকার

    • 0 থেকে n রেঞ্জের জন্য, করুন

      • যদি lcm mod A[i] 0 এর মত হয়, তাহলে

        • প্রদর্শন i

উদাহরণ

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

from collections import defaultdict
def get_seq(A,k):
   n = len(A)
   my_dict = defaultdict(lambda:0)
   for i in range(0, n):
      my_dict[A[i]] += 1
   count = [0] * (k + 1)
   for key in my_dict:
      if key <= k:
         i = 1
         while key * i <= k:
            count[key * i] += my_dict[key]
            i += 1
      else:
         break
   lcm = 0
   size = 0
   for i in range(1, k + 1):
      if count[i] > size:
         size = count[i]
         lcm = i
   if lcm == 0:
      print(-1)
   else:
      print("LCM = {0}, Length = {1}".format(lcm, size))
      print("Index values: ", end = "")
      for i in range(0, n):
         if lcm % A[i] == 0:
            print(i, end = " ")

k = 20
A = [3, 4, 5, 6]
get_seq(A,k)

ইনপুট

[3, 4, 5, 6] , 20

আউটপুট

LCM = 12, Length = 3 Index values: 0 1 3

  1. পাইথনে একটি এন-আরি গাছের দীর্ঘতম পথের দৈর্ঘ্য খুঁজে বের করার প্রোগ্রাম

  2. পাইথন প্রোগ্রামে অ্যারের সমষ্টি খুঁজুন

  3. পাইথন প্রোগ্রাম একটি অ্যারের বৃহত্তম উপাদান খুঁজে বের করতে

  4. অ্যারের যোগফল খুঁজে পেতে পাইথন প্রোগ্রাম