Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm ra các tích vô hướng của vectơ được tạo từ một chuỗi vô hạn trong Python

Giả sử chúng ta được cho ba số nguyên c, m và n. Chúng ta phải tạo một dãy vô hạn, trong đó giá trị đầu tiên là 0, giá trị thứ hai là c, và từ giá trị thứ ba trở đi nó bằng ki =(ki-2 + ki-1) mod m. Chúng ta phải tạo tất cả các giá trị trong chuỗi lên đến mục k2n + 1. Bây giờ từ các giá trị của chuỗi; chúng ta lấy hai giá trị liên tiếp trong dãy làm tọa độ x và y của vectơ hai chiều và tạo ra n số vectơ. Điểm cần lưu ý, chúng tôi sử dụng các giá trị trong chuỗi từ giá trị thứ ba. Có một tập hợp S khác trong đó mỗi giá trị là tích vô hướng của vectơ i và vectơ j trong đó 1 <=i, j <=n và i! =J. Chúng ta phải tìm ra số lượng phần dư khác nhau trong tập S. Nếu giá trị là rất lớn, chúng ta điều chỉnh nó theo m.

Vì vậy, nếu đầu vào là 5, 6, 4, thì đầu ra sẽ là 3

Trình tự được tạo là:[0, 5, 5, 4, 3, 1, 4, 5, 3, 2].

Các vectơ là:(5, 4), (3, 1), (4, 5), (3, 2).

Từ tích vô hướng của các vectơ, chỉ có ba giá trị dư mod 6 trong tập S.

Do đó, kết quả là 3 mod 6 =3.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • nếu n giống 1, thì
    • trả về 0
  • nếu không,
    • temp_arr:=một danh sách mới có kích thước 2 * n + 2 được khởi tạo bằng các chữ số 0
    • temp_arr [0]:=0
    • temp_arr [1]:=c
    • arr2:=một danh sách mới
    • đối với tôi trong phạm vi 2 đến 2 * n + 2, hãy thực hiện
      • temp_arr [i]:=(temp_arr [i - 1] + temp_arr [i - 2]) mod m
    • đối với tôi trong phạm vi 2 đến 2 * n-2, tăng thêm 2, thực hiện
      • temp:=(temp_arr [i] * temp_arr [i + 2] + temp_arr [i + 1] * temp_arr [i + 3]) mod m
      • chèn tạm thời vào cuối arr2
      • temp:=(temp_arr [i] * temp_arr [i + 4] + temp_arr [i + 1] * temp_arr [i + 5]) mod m
      • chèn tạm thời vào cuối arr2
    • temp:=(temp_arr [2 * n-2] * temp_arr [2 * n] + temp_arr [2 * n-1] * temp_arr [2 * n + 1]) mod m
    • chèn tạm thời vào cuối arr2
    • xóa các mục trùng lặp khỏi arr2
    • trả về kích thước của arr2

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

5, 6, 4

Đầu ra

3