1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| 二维递归 斐波那契数列(f_i)是指满足以下条件的唯一数列:
f_0=0 f_1=1 f_{i+1}=f_i+f_{i-1}
类似地,存在唯一的函数A(m,n)满足: A(0,0)=0 A(0,1)=1 A(m+1,n)=A(m,n+1)+A(m,n) A(m+1,n+1)=2A(m+1,n)+A(m,n)
定义S(k)=\displaystyle\sum_{i=2}^k\sum_{j=2}^k A(f_i,f_j)。例如: \begin{aligned} S(3)&=A(1,1)+A(1,2)+A(2,1)+A(2,2)\\ &=2+5+7+16\\ &=30 \end{aligned}
已知S(5)=10396。
求S(50),并对1123581313取余作为你的答案。
我的思路:
A(m+1,n)=A(m,n+1)+A(m,n)=3A(m,n)+A(m-1,n)
所以每一项可以转化为用初始值A(0,x)和A(1,x)套上矩阵快速幂递推.
初始值:A(0,x)=2^{x-1}请自己推导A(1,x)的值. 我打了个表,你需要注意A(1,n)\neq 3⋅2n−1 0 1 2 4 8 16 32 64 128 256 512 1 2 5 12 28 64 144 320 704 1536 3328 3 7 16 37 86 200 464 1072 2464 5632 12800 10 23 53 122 281 648 1496 3456 7984 18432 42496 33 76 175 403 928 2137 4922 11340 26136 60256 138944 109 251 578 1331 3065 7058 16253 37428 86196 198528 457312 360 829 1909 4396 10123 23311 53680 123613 284654 655504 1509536 1189 2738 6305 14519 33434 76991 177293 408266 940145 2164944 4985392 3927 9043 20824 47953 110425 254284 585559 1348411 3105088 7150321 16465586 12970 29867 68777 158378 364709 839843 1933970 4453499 10255409 23615906 54382133 42837 98644 227155 523087 1204552 2773813 6387469 14708908 33871315 77998039 179611984
请给我c++代码,注意取模.
|