তিনটি পূর্ণসংখ্যা c, m, এবং n দেওয়া আছে। একটি অসীম সিকোয়েন্স জেনারেট করতে হবে, যেখানে প্রথম মান ০, দ্বিতীয় মান c, এবং তৃতীয় মান থেকে শুরু করে ki = (ki-2 + ki-1) mod m। সিকোয়েন্সের k2n+1 আইটেম পর্যন্ত সব মান জেনারেট করতে হবে। এখন সিকোয়েন্সের মানগুলোর থেকে দুটি secuencia মান নিয়ে x এবং y কোঅর্ডিনেট হিসেবে n সংখ্যা টু-ডাইমেনশনাল ভেক্টর তৈরি করতে হবে। মনে রাখবেন, সিকোয়েন্সের তৃতীয় মান থেকে ব্যবহার করতে হবে। S সেটে প্রতিটি মান হল ভেক্টর i এবং ভেক্টর j-এর স্কেলার প্রোডাক্ট, যেখানে 1 <= i, j <= n এবং i != j। S সেটে কতগুলো ভিন্ন রেজিডু মান আছে তা বের করতে হবে। মান খুব বড় হলে m দিয়ে মড করুন।
ইনপুট 5, 6, 4 হলে আউটপুট হবে 3।
জেনারেটেড সিকোয়েন্স: [0, 5, 5, 4, 3, 1, 4, 5, 3, 2]
ভেক্টরগুলো: (5, 4), (3, 1), (4, 5), (3, 2)
ভেক্টরগুলোর স্কেলার প্রোডাক্ট থেকে সেট S-তে মড ৬-এ শুধু তিনটি রেজিডু মান পাওয়া যায়। ফলাফল 3 mod 6 = 3।
সমাধানের ধাপসমূহ
- যদি n == 1 হয়, তবে 0 ফেরত দিন
- অন্যথায়:
- temp_arr := 2*n+2 আকারের ০ দিয়ে ইনিশিয়ালাইজড লিস্ট
- temp_arr[0] := 0, temp_arr[1] := c
- arr2 := নতুন লিস্ট
- i = 2 থেকে 2*n+2 পর্যন্ত:
- temp_arr[i] := (temp_arr[i-1] + temp_arr[i-2]) mod m
- i = 2 থেকে 2*n-2 পর্যন্ত ২ করে বাড়াতে:
- temp := (temp_arr[i] * temp_arr[i+2] + temp_arr[i+1] * temp_arr[i+3]) mod m
- arr2-তে temp যোগ করুন
- temp := (temp_arr[i] * temp_arr[i+4] + temp_arr[i+1] * temp_arr[i+5]) mod m
- arr2-তে temp যোগ করুন
- temp := (temp_arr[2*n-2] * temp_arr[2*n] + temp_arr[2*n-1] * temp_arr[2*n+1]) mod m
- arr2-তে temp যোগ করুন
- arr2 থেকে ডুপ্লিকেট মুছে দিন
- arr2-এর আকার ফেরত দিন
উদাহরণ
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