ধরুন আমাদের পূর্ণসংখ্যা A এর একটি অ্যারে আছে; আমাদের যোগফলের জন্য সমস্ত মান খুঁজে বের করতে হবে যাতে একটি মানের যোগফলের জন্য অ্যারেটিকে যোগফলের উপ-অ্যারেতে ভাগ করা যায় [i]। যদি আমরা অ্যারেটিকে সমান যোগফলের সাব-অ্যারেতে ভাগ করতে না পারি তাহলে -1 রিটার্ন করুন।
সুতরাং, যদি ইনপুটটি A =[2, 4, 2, 2, 2, 4, 2, 6] এর মতো হয় তবে আউটপুট হবে [6,8,12] কারণ অ্যারেটিকে সাব-অ্যারেতে ভাগ করা যেতে পারে। যোগফল 6, 8 এবং 12। এগুলি নিম্নরূপ:[{2, 4}, {2, 2, 2}, {4, 2}, {6}] [{2, 4, 2}, {2, 2 , 4},{2, 6}] [{2, 4, 2, 2, 2},{4, 2, 6
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
n :=a
এর আকার -
টেবিল :=n আকারের একটি অ্যারে এবং 0
দিয়ে ভরা -
টেবিল[0] :=a[0]
-
1 থেকে n রেঞ্জের জন্য, করুন
-
টেবিল[i] :=a[i] + টেবিল[i - 1]
-
-
S :=টেবিল[n - 1]
-
my_map :=একটি নতুন মানচিত্র
-
0 থেকে n রেঞ্জের জন্য, করুন
-
my_map[টেবিল[i]] :=1
-
-
উত্তর :=একটি নতুন সেট
-
i এর জন্য রেঞ্জ 1 থেকে পূর্ণসংখ্যা অংশ (S) এর বর্গমূল + 1, do
-
যদি S mod i 0 এর মত হয়, তাহলে
-
is_present :=সত্য
-
part_1 :=i
-
part_2 :=S / i
এর ভাগফল -
j এর জন্য পরিসর part_1 থেকে S + 1, part_1 দ্বারা প্রতিটি ধাপে আপডেট করুন, করুন
-
যদি j my_map-এ না থাকে, তাহলে
-
is_present :=মিথ্যা
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
যদি is_present সত্য হয় এবং part_1 S এর মত না হয়, তাহলে
-
উত্তর যোগ করুন(part_1)
-
-
is_present :=সত্য
-
(S / i) থেকে S + 1 পর্যন্ত j এর পরিসীমা ভাগফলের জন্য, প্রতিটি ধাপে S // i দ্বারা আপডেট করুন, করুন
-
যদি j my_map-এ না থাকে, তাহলে
-
is_present :=মিথ্যা;
-
লুপ থেকে বেরিয়ে আসুন
-
-
-
যদি is_present এবং part_2 S এর মত না হয়, তাহলে
-
উত্তর যোগ করুন(part_2)
-
-
-
-
যদি উত্তরের আকার 0 এর মতো হয়, তাহলে
-
রিটার্ন -1
-
-
প্রত্যাবর্তন উত্তর
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from math import sqrt
def find_sum(a) :
n = len(a)
table = [0] * n
table[0] = a[0]
for i in range(1, n) :
table[i] = a[i] + table[i - 1]
S = table[n - 1]
my_map = {}
for i in range(n) :
my_map[table[i]] = 1
answer = set()
for i in range(1, int(sqrt(S)) + 1) :
if (S % i == 0) :
is_present = True;
part_1 = i
part_2 = S // i
for j in range(part_1 , S + 1, part_1) :
if j not in my_map :
is_present = False
break
if (is_present and part_1 != S) :
answer.add(part_1)
is_present = True
for j in range(S // i , S + 1 , S // i) :
if j not in my_map:
is_present = False;
break
if (is_present and part_2 != S) :
answer.add(part_2)
if(len(answer) == 0) :
return -1
return answer
a = [2, 4, 2, 2, 2, 4, 2, 6]
print(find_sum(a)) ইনপুট
[2, 4, 2, 2, 2, 4, 2, 6]
আউটপুট
{8, 12, 6}