#P9510. 『STA - R3』高维立方体

    ID: 8741 Type: RemoteJudge 1500ms 256MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>数学O2优化矩阵加速斐波那契,Fibonacci

『STA - R3』高维立方体

题目描述

如下定义斐波那契数列:

$$\operatorname{fib}(n)=\begin{cases}1&n\le 2\\\operatorname{fib}(n-1)+\operatorname{fib}(n-2)&n>2\end{cases} $$

现在我们定义一个函数(注意在 n<1n<1 时这个函数的值是 00):

f(n)=i=1nfib2(i)f(n)=\sum_{i=1}^n\operatorname{fib}^2(i)

由于求斐波那契数列的前缀和太简单了,你需要求出:

$$\sum_{i=1}^n\operatorname{fib}(i)\cdot(f(i-2)+\operatorname{fib}^2(i)+\operatorname{fib}(i)) $$

的值,答案对输入的 pp 取模。

注:fib2(x)\operatorname{fib}^2(x) 表示 fib(x)\operatorname{fib}(x) 的平方。

输入格式

本题有多组数据

第一行一个整数 TT,表示数据的组数。

对于每组数据,一行两个整数 n,pn,p

输出格式

对于每组数据,输出一行一个整数,表示答案对 pp 取模后的结果。

3
2 100
3 100
4 100
4
18
60

提示

样例解释:

对于第一组数据,1×(0+12+1)+1×(0+12+1)=41\times(0+1^2+1)+1\times(0+1^2+1)=4

对于第二组数据,$1\times(0+1^2+1)+1\times(0+1^2+1)+2\times(1+2^2+2)=18$。

数据范围

本题采用捆绑测试。

  • Subtask 1(5 points):n107n \le 10^7p=109+7p=10^9+7
  • Subtask 2(20 points):T104T\le 10^4n108n \le 10^8p=109+7p=10^9+7
  • Subtask 3(5 points):p=2p=2
  • Subtask 4(15 points):p5p\le 5
  • Subtask 5(30 points):T104T\le 10^4n108n \le 10^8
  • Subtask 6(25 points):无特殊限制。

对于所有数据,1T2×1051\le T\le 2\times 10^51n10181\le n\le 10^{18}2p109+72\le p\le 10^9+7