একটি সিকোয়েন্স nums দেওয়া আছে। এর সাবসিকোয়েন্সের ম্যাক্সিমাম আকার বের করতে হবে যেখানে প্রতিটি জোড়া (p, q) 'নাইস' জোড়া। নাইস জোড়ার শর্ত:
pএবংq-র স্বতন্ত্র প্রাইম ডিভাইজরের সংখ্যার প্যারিটি (সম/বিষম) একই।- অথবা
pএবংq-র সব পজিটিভ ডিভাইজরের যোগফলের প্যারিটি একই।
উদাহরণ
ইনপুট: nums = [2, 3, 6, 8]
আউটপুট: 3
সমাধান পদ্ধতি
n := len(nums)cnt, total, result— তিনটি খালি লিস্ট।- প্রতিটি
iinnumsএর জন্য:- প্রাইম সংখ্যাগুলো খুঁজে বের করুন।
i-র স্বতন্ত্র প্রাইম ডিভাইজরের সংখ্যা গণনা করুন →cnt-এ 'even'/'odd' যোগ করুন।i-র সব ডিভাইজরের যোগফল গণনা করুন →total-এ 'even'/'odd' যোগ করুন।
- সব জোড়া
(i, j)চেক করুন: যদিcnt[i] == cnt[j]বাtotal[i] == total[j]হয়, তবে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)):
prime.append(j)
for j in prime:
if i % j == 0:
count += 1
cnt.append('odd' if count % 2 else 'even')
for j in range(1, i + 1):
if i % j == 0:
tot += j
total.append('odd' if tot % 2 else '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)) # আউটপুট: 3
ইনপুট
15, 3, 8
আউটপুট
3