কম্পিউটার

পাইথনে P দ্বারা যোগফলকে বিভাজ্য করার প্রোগ্রাম


ধরুন আমাদের একটি অ্যারের সংখ্যা এবং আরেকটি মান p আছে, আমরা ক্ষুদ্রতম সাব্যারে (পুরো অ্যারে নয়) সরিয়ে ফেলি যাতে অবশিষ্ট মানের যোগফল p দ্বারা বিভাজ্য হয়। আমাদেরকে অপসারণ করতে হবে এমন ক্ষুদ্রতম সাবয়ারের দৈর্ঘ্য খুঁজে বের করতে হবে, যদি এমন কোন সাবয়ারে না থাকে তাহলে -1 রিটার্ন করুন।

সুতরাং, ইনপুট যদি nums =[8,2,6,5,3] p =7 এর মত হয়, তাহলে আউটপুট হবে 1 কারণ যদি আমরা 3টি সরিয়ে দেই, তাহলে মোট যোগফল হবে 21 এবং সেটি 7 দ্বারা বিভাজ্য।

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

  • উত্তর :=অসীম
  • s :=(সংখ্যায় সমস্ত উপাদানের যোগফল) mod p
  • d :=একটি মানচিত্রে কী-মান জোড়া রয়েছে {0:-1}
  • কাম :=0
  • যদি s 0 এর সমান হয়, তাহলে
    • রিটার্ন 0
  • আমি 0 থেকে সংখ্যার আকারের মধ্যে,
      করুন
    • কাম :=সহ + সংখ্যা[i]
    • r :=কাম মোড পি
    • যদি d-এ (r-s)mod p থাকে, তাহলে
      • উত্তর :=সর্বনিম্ন উত্তর এবং i - d[(r-s) mod p]
    • d[r] :=i
  • উত্তর দিন যদি উত্তর হয় <সংখ্যার আকার অন্যথায় -1

উদাহরণ

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

def solve(nums, p):
   ans = float("inf")
   s = sum(nums) % p
   d = {0:-1}
   cum = 0
   if s == 0:
      return 0
   for i in range(len(nums)):
      cum+=nums[i]
      r = cum%p
      if (r-s)%p in d:
         ans = min(ans, i-d[(r-s)%p])
      d[r] = i
   return ans if ans<len(nums) else -1

nums = [8,2,6,5,3]
p = 7
print(solve(nums, p))

ইনপুট

[8,2,6,5,3], 7

আউটপুট

1

  1. আমরা পাইথনে সমান যোগফল দিয়ে দুটি পার্টিশনের গ্রুপ করতে পারি কিনা তা পরীক্ষা করার জন্য প্রোগ্রাম?

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

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

  4. পাইথনে ভারতীয় পতাকা বানানোর প্রোগ্রাম