ধরুন, আমাদের বিভিন্ন আকারের বেশ কয়েকটি ধাতব বার পরিবহনের কাজ দেওয়া হয়েছে। কিন্তু পরিবহন কন্টেইনারটি দৈর্ঘ্যে ছোট, এতে শুধুমাত্র 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_check[i] সত্য হয় −
-
-
প্রধান ফাংশন থেকে, নিম্নলিখিতগুলি করুন -
- 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, তারপর
- যদিও mod p_num মান 0 এর মতো, do
-
- তাপ :=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