मान लीजिए हमें तीन इंटीजर नंबर c, m, और n दिए गए हैं। हमें एक अनंत अनुक्रम जनरेट करना है, जहां पहला मान 0 है, दूसरा मान c है, और तीसरे मान से आगे यह ki = (ki-2 + ki-1) mod m के बराबर है। हमें अनुक्रम में आइटम k2n+1 तक सभी मान जनरेट करने हैं। अब अनुक्रम के मानों से; हम अनुक्रम में दो क्रमागत मानों को एक द्वि-आयामी वेक्टर के x और y निर्देशांक के रूप में लेते हैं और n संख्या के वेक्टर जनरेट करते हैं। ध्यान दें, हम अनुक्रम में तीसरे मान से मानों का उपयोग करते हैं। एक और सेट S है जहां प्रत्येक मान वेक्टर i और वेक्टर j का स्केलर उत्पाद है जहां 1 <= i, j <= n और i != j। हमें सेट S में विभिन्न अवशेषों की संख्या ढूंढनी है। यदि मान बहुत बड़ा है, तो इसे m से मोड्यूलो करें।
इसलिए, यदि इनपुट 5, 6, 4 है, तो आउटपुट 3 होगा।
समाधान दृष्टिकोण
- यदि n == 1 है, तो 0 लौटाएं
- अन्यथा, आकार 2*n+2 का temp_arr बनाएं
- फिबोनाची-जैसे अनुक्रम को m से मोड्यूलो करके जनरेट करें
- क्रमागत वेक्टर जोड़े के स्केलर उत्पादों की गणना करें
- डुप्लिकेट हटाएं और अद्वितीय अवशेषों की संख्या लौटाएं
उदाहरण कार्यान्वयन
def solve(c, m, n):
if n == 1:
return 0
else:
temp_arr = [0 for i in range(2 * n + 2)]
temp_arr[0] = 0
temp_arr[1] = c
arr2 = []
for i in range(2, 2 * n + 2):
temp_arr[i] = (temp_arr[i - 1] + temp_arr[i - 2]) % m
for i in range(2, 2 * n - 2, 2):
temp = (temp_arr[i] * temp_arr[i + 2] + temp_arr[i + 1] * temp_arr[i + 3]) % m
arr2.append(temp)
temp = (temp_arr[i] * temp_arr[i + 4] + temp_arr[i + 1] * temp_arr[i + 5]) % m
arr2.append(temp)
temp = (temp_arr[2 * n - 2] * temp_arr[2 * n] + temp_arr[2 * n - 1] * temp_arr[2 * n + 1]) % m
arr2.append(temp)
arr2 = set(arr2)
return len(arr2)
print(solve(5, 6, 4))
इनपुट
5, 6, 4
आउटपुट
3