मान लीजिए हमारे पास आकार n का एक अनुक्रम nums है। हमें nums के उस सबसीक्वेंस का अधिकतम आकार खोजना है जिसमें हर जोड़ी (p, q) एक अच्छी जोड़ी है? एक जोड़ी को अच्छी जोड़ी कहा जाता है यदि और केवल यदि यह इनमें से कम से कम एक शर्त को पूरा करती है: 1. p के विशिष्ट अभाज्य भाजकों की संख्या की समता q के समान है। उदाहरण के लिए, मान 18 के दो विशिष्ट अभाज्य भाजक हैं: 2 और 3। 2. p के सभी धनात्मक भाजकों के योग की समता q के समान है।
तो, यदि इनपुट nums = [2,3,6,8] है, तो आउटपुट 3 होगा।

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- n := nums का आकार
- तीन खाली सूचियाँ cnt, total, result परिभाषित करें
- nums में प्रत्येक i के लिए, करें
- count := 0, tot := 0
- prime := एक नई सूची
- nums में प्रत्येक j के लिए, करें
- यदि (j mod k, 2 से j तक की रेंज में सभी k के लिए) सत्य है, तो
- j को prime के अंत में डालें
- यदि (j mod k, 2 से j तक की रेंज में सभी k के लिए) सत्य है, तो
- prime में प्रत्येक j के लिए, करें
- यदि i mod j, 0 है, तो
- count := count + 1
- यदि i mod j, 0 है, तो
- यदि count सम है, तो
- 'odd' को cnt के अंत में डालें
- अन्यथा,
- 'even' को cnt के अंत में डालें
- j को 1 से i तक की रेंज में, करें
- यदि i mod j, 0 के समान है, तो
- tot := tot + j
- यदि i mod j, 0 के समान है, तो
- यदि tot विषम है, तो
- 'odd' को total के अंत में डालें
- अन्यथा,
- 'even' को total के अंत में डालें
- i को 0 से n-2 तक की रेंज में, करें
- j को i+1 से n - 1 तक की रेंज में, करें
- यदि cnt[i], cnt[j] के समान है या total[i], total[j] के समान है, तो
- nums[i] को result के अंत में डालें
- यदि j, n-2 के समान है, तो
- nums[j] को result के अंत में डालें
- यदि cnt[i], cnt[j] के समान है या total[i], total[j] के समान है, तो
- j को i+1 से n - 1 तक की रेंज में, करें
- result := result से एक नए सेट से एक नई सूची
- result का आकार लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
def solve(nums): n = len(nums) cnt = [] total = [] result = [] for i in nums: count = 0 tot = 0 prime = [] for j in nums: if all(j % k for k in range(2, j)) == True: prime.append(j) for j in prime: if i % j == 0: count += 1 if count % 2: cnt.append('odd') else: cnt.append('even') for j in range(1,i+1): if i % j == 0: tot += j if tot % 2: total.append('odd') else: total.append('even') for i in range(n-1): for j in range(i+1, n): if cnt[i] == cnt[j] or total[i] == total[j]: result.append(nums[i]) if j == n-1: result.append(nums[j]) result = list(set(result)) return len(result) nums = [2,3,6,8] print(solve(nums))इनपुट
15, 3, 8
आउटपुट
3