मान लीजिए कि हमारे पास एक मान n है, हमें जोड़े (a, b) [a
इसलिए, यदि इनपुट n =4 जैसा है, तो आउटपुट 2 होगा क्योंकि मान्य जोड़े (1, 2) और (1, 3) हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन divisors_gen() परिभाषित करें। इसमें n . लगेगा
- divs :=आकार n+1 की सूचियों की एक सूची। और प्रत्येक आंतरिक सूची में 1 है
- divs[0] :=केवल एक तत्व 0 के साथ एक सूची
- 2 से n की श्रेणी में i के लिए, करें
- जे के लिए श्रेणी 1 से (n / i) + 1 के तल तक, do
- सूचकांक [i * j] पर सूची के अंत में i डालें
- जे के लिए श्रेणी 1 से (n / i) + 1 के तल तक, do
- डिव लौटाएं लेकिन सभी आंतरिक सूचियों को उलट दें
- मुख्य विधि से, निम्न कार्य करें -
- परिणाम:=0
- d_cache :=divisors_gen(n+1)
- एक श्रेणी 1 से n-1 के लिए, करो
- मैं :=1
- s :=एक नया सेट
- जबकि a*i
- b :=n - a*i
- d_cache में प्रत्येक d के लिए[b], करें
- यदि d> a, तो
- यदि d s में नहीं है, तो
- परिणाम:=परिणाम + 1
- यदि d s में नहीं है, तो
- अन्यथा,
- लूप से बाहर आएं
- सेट में d डालें
- i :=i + 1
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def divisors_gen(n): divs = [[1] for x in range(0, n + 1)] divs[0] = [0] for i in range(2, n + 1): for j in range(1, n // i + 1): divs[i * j].append(i) return [i[::-1] for i in divs] def solve(n): result = 0 d_cache = divisors_gen(n+1) for a in range(1, n): i = 1 s = set([]) while a*i < n: b = n - a*i for d in d_cache[b]: if d > a: if d not in s: result += 1 else: break s.add(d) i += 1 return result n = 4 print(solve(n))
इनपुट
4
आउटपुट
2