Tính hàm

Xem dạng PDF

Gửi bài giải

Điểm: 1,16 (OI)
Giới hạn thời gian: 3.0s
Giới hạn bộ nhớ: 512M
Input: stdin
Output: stdout

Nguồn bài:
HSG Duyên hải và Ðồng bằng Bắc Bộ 2014
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Dãy Fibonacci là dãy vô hạn các số tự nhiên bắt đầu bằng hai phần tử ~1~ và ~1~, các phần tử sau đó được thiết lập theo quy tắc mỗi phần tử bằng tổng hai phần tử trước nó. Công thức truy hồi của dãy Fibonacci như sau:

  • ~Fibonacci(n)~ ~= 1~ với ~n = 1~, ~2~
  • ~Fibonacci(n)~ ~=~ ~Fibonacci(n - 1)~ ~+~ ~Fibonacci(n - 2)~

Xét hàm ~f(x~, ~y)~ sau:

  • ~f(x~, ~y)~ ~= x~ nếu ~y = 0~
  • ~f(x~, ~y)~ ~= y~ nếu ~x = 0~
  • ~f(x, y) = \alpha \times f(x - 1, y) + \beta \times f(x, y - 1) + g(x, y)~ nếu ~x~, ~y > 0~.

Trong đó, ~g(x~, ~y)~ là ước số chung lớn nhất của ~Fibonacci(x)~ và ~Fibonacci(y)~.

Yêu cầu:

Cho ~4~ số nguyên không âm ~x~, ~y~, ~\alpha~, ~\beta~ và số nguyên dương ~B~, hãy tính hàm ~f(x~, ~y) \bmod B~.

Input

Dòng đầu tiên ghi số nguyên dương ~K~ là số lượng bộ dữ liệu.

Tiếp đến là ~K~ dòng, mỗi dòng chứa ~5~ số nguyên ~x~, ~y~, ~\alpha~, ~\beta~, ~B~ tương ứng với một bộ dữ liệu. Các số trên cùng một dòng được ghi cách nhau ít nhất một dấu cách.

Output

Kết quả: Ghi ra thiết bị ra chuẩn gồm ~K~ dòng, mỗi dòng ghi một số nguyên là giá trị hàm ~f~ tính được tương ứng với bộ dữ liệu trong file dữ liệu vào.

Giới hạn

  • Subtask ~1~ (20/70 điểm): Giả thiết là ~x~, ~y \leq 10~; ~\alpha~, ~\beta~, ~B \leq 10^{6}~.
  • Subtask ~2~ (20/70 điểm): Giả thiết là ~x~, ~y \leq 50~; ~\alpha~, ~\beta~, ~B \leq 10^{9}~.
  • Subtask ~3~ (15/70 điểm): Giả thiết là ~x~, ~y \leq 50~; ~\alpha~, ~\beta~, ~B \leq 10^{18}~.
  • Subtask ~4~ (15/70 điểm): Giả thiết là ~x~, ~y \leq 500~; ~\alpha~, ~\beta~, ~B \leq 10^{18}~.

Sample Input

3
0 10 1 1 100
10 0 1 1 100
1 1 1 1 100

Sample Output

10
10
3

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.