কম্পিউটার

পাইথন প্রোগ্রাম একটি পাত্রে বেশ কয়েকটি ধাতব বার প্যাক করার জন্য অপারেশনের সংখ্যা খুঁজে বের করতে


ধরুন, আমাদের বিভিন্ন আকারের বেশ কয়েকটি ধাতব বার পরিবহনের কাজ দেওয়া হয়েছে। কিন্তু পরিবহন কন্টেইনারটি দৈর্ঘ্যে ছোট, এতে শুধুমাত্র 1 দৈর্ঘ্যের বার থাকতে পারে। আমাদেরকে n নম্বর বার দেওয়া হয়েছে এবং তাদের দৈর্ঘ্য একটি তালিকায় দেওয়া হয়েছে। সুতরাং, পাত্রে সব বার মাপসই করা; আমাদের সমস্ত বার কাটতে হবে এবং ভাগ করতে হবে যাতে সেগুলি একক আকারের হয়। আরও, আমরা সমস্ত বারগুলিকে পাত্রে ফিট করি যার জন্য আমাদের একটি অপারেশন খরচ হয়। বারগুলিতে আমাদের কতগুলি অপারেশন করতে হবে তা আমাদের খুঁজে বের করতে হবে৷

পাইথন প্রোগ্রাম একটি পাত্রে বেশ কয়েকটি ধাতব বার প্যাক করার জন্য অপারেশনের সংখ্যা খুঁজে বের করতে

সুতরাং, যদি ইনপুটটি হয় input_arr =[6, 3, 7], তাহলে আউটপুট হবে 22

  • 6 আকারের বারটিকে 1 আকারের বারে পরিণত করতে, আমাদের 10টি অপারেশন করতে হবে৷

  • সাইজ 3 এর বারটিকে 1 সাইজের বারে পরিণত করতে, আমাদের 4টি অপারেশন করতে হবে।

  • 7 আকারের বারটিকে 1 আকারের বারে পরিণত করতে, আমাদের 8টি অপারেশন করতে হবে৷

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

  • একটি ফাংশন prime_find() সংজ্ঞায়িত করুন। এটি ইনপুট_সংখ্যা গ্রহণ করবে

    • prime_check :=((input_num-1)/2) এর আকারের ফ্লোর মানের একটি নতুন তালিকা যার মান True

    • (ইনপুট_সংখ্যা) +1 এর বর্গমূলের তল থেকে 3 পরিসরে p_num এর জন্য, 2 দ্বারা বৃদ্ধি করুন, করুন

      • যদি প্রাইম_চেক [(p_num-3)/2]-এর ফ্লোর মান-শূন্য হয়, তাহলে

        • প্রাইম_চেক-এ (p_num ^ 2-3)/2 থেকে p_num রেঞ্জ ফ্লোর মানের প্রতিটি উপাদানের জন্য, করুন

          • prime_check[এলিমেন্ট] :=আকারের একটি নতুন তালিকা (((input_num-p_num ^2)/(2*p_num) + 1)) এর ফ্লোর মান ফলস ধারণ করে

    • 0 থেকে ফ্লোর মান (ইনপুট_সংখ্যা - 1) / 2 এর রেঞ্জের জন্য, করুন

      • যদি prime_check[i] সত্য হয় −
        • 2 + 2 * i + 3

          মান সম্বলিত একটি তালিকা ফেরত দিন
  • প্রধান ফাংশন থেকে, নিম্নলিখিতগুলি করুন -

    • prime_nums :=prime_find(10^6 + 100)
    • ফলাফল :=0
    • input_arr-এ প্রতিটি মানের জন্য, করুন
      • ফলাফল :=ফলাফল + মান
      • f_list :=একটি নতুন তালিকা
      • প্রাইম_সংখ্যার প্রতিটি p_num-এর জন্য, করুন
        • যদিও mod p_num মান 0 এর মতো, do
          • f_list এর শেষে p_num ঢোকান
          • মান :=ফ্লোর মান (মান / p_num)
        • যদি p_num^2> মান, তাহলে
          • যদি মান> 1, তারপর
            • f_list-এর শেষে মান সন্নিবেশ করান
          • লুপ থেকে প্রস্থান করুন

        • তাপ :=1
        • প্রতিটি p_num f_list এ বিপরীত ক্রমে, করুন
          • ফলাফল :=ফলাফল + তাপমাত্রা
          • temp :=temp * p_num
    • ফলাফল

উদাহরণ

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

from math import floor,sqrt
def prime_find(input_num):
   prime_check = [True]*((input_num-1)//2)
   for p_num in range(3,floor(sqrt(input_num))+1,2):
      if prime_check[(p_num-3)//2]: prime_check[(p_num**2-3)//2::p_num] = [False] * ((input_num-p_num**2)//(2*p_num) + 1)
   return [2]+[2*i+3 for i in range((input_num - 1) // 2) if prime_check[i]]
def solve(input_arr):
   prime_nums = prime_find(10**6+100)
   result = 0
   for value in input_arr:
      result += value
      f_list = []
      for p_num in prime_nums:
         while value % p_num == 0:
            f_list.append(p_num)
            value //= p_num
         if p_num**2 > value:
            if value > 1:
               f_list.append(value)
         break
      temp = 1
      for p_num in f_list[-1::-1]:
         result += temp
         temp *= p_num
   return result
if __name__ == "__main__":
print(solve([6, 3, 7]))

ইনপুট

[6, 3, 7]

আউটপুট

22

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

  2. পাইথন প্রোগ্রাম ডিকশনারিতে দ্বিতীয় সর্বোচ্চ মান খুঁজে পেতে

  3. একটি তালিকায় দ্বিতীয় বৃহত্তম সংখ্যা খুঁজে পেতে পাইথন প্রোগ্রাম

  4. পাইথন প্রোগ্রাম একটি তালিকায় সবচেয়ে বড় সংখ্যা খুঁজে বের করতে