Tính hàm

View as PDF

Submit solution

Points: 1.16 (partial)
Time limit: 3.0s
Memory limit: 512M
Input: stdin
Output: stdout

Problem source:
HSG Duyên hải và Ðồng bằng Bắc Bộ 2014
Problem type
Allowed languages
C, C++, Java, Kotlin, Pascal, PyPy, Python, 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

Comments

Please read the guidelines before commenting.


There are no comments at the moment.