【题解】1644:【例 4】佳佳的 Fibonacci

1644:【例 4】佳佳的 Fibonacci

【题目描述】

佳佳对数学,尤其对数列十分感兴趣。在研究完 Fibonacci 数列后,他创造出许多稀奇古怪的数列。例如用 S(n)

表示 Fibonacci 前 n 项和 modm 的值,即 S(n)=(F1+F2+...+Fn)modm,其中 F1=F2=1,F**i=F**i−1+F**i−2 。可这对佳佳来说还是小菜一碟。终于,她找到了一个自己解决不了的问题。用 T(n)=(F1+2F2+3F3+...+nFn)modm 表示 Fibonacci 数列前 n项变形后的和 modm 的值。现在佳佳告诉你了一个 nm,请求出 T(n)的值。

【输入】

输入数据包括一行,两个用空格隔开的整数 n,m

【输出】

仅一行,T(n) 的值。

【输入样例】

5 5

【输出样例】

1

【提示】

样例解释

T(5)=(1+2×1+3×2+4×3+5×5)mod5=1

数据范围与提示:

对于 30% 的数据,1≤n≤1000

对于 60% 的数据,1≤m≤1000

对于 100% 的数据,1≤n,m≤2^31−1

solution

T[n] 无法用递推式表达,是一个发散型的序列,而一般的收敛形和线型的序列都可以构造递推式

我们把发散型的T[n] 用其他可以构造递推式的序列表示

T[n] = F[1] + 2F[2] + 3F[3] + ... + nF[n]

S[n] = F[1] + F[2] + F[3] + ... + F[n]

令P[n] = nS[n] - T[n] = (n-1)F[1] + (n-2)F[2] + ... + (n-n)F[n]

则P序列满足:

P[n+1]

= (n+1)(S[n] +F[n+1]) - T[n+1]

= nS[n] +S[n] + (n+1)F[n+1] - T[n] - (n+1)F[n+1]

= nS[n] - T[n] + F[n+1] + S[n]

= P[n] + S[n]

我们只需按矩阵乘法求出P序列和S序列,便可得T序列

T[n] = nS[n] - P[n]

[F[i-1],F[i],S[i],P[i]] * [0 1 1 0 \n1 1 1 0 \n0 0 1 1 \n0 0 0 1 \n] = [F[i],F[i+1],S[i+1],P[i+1]]

由[F[0],F[1],S[1],P[1]]做n-1次乘法即可

构造矩阵大小:4*4

出错原因:矩阵乘法不具有交换律,如果最后再乘初矩阵[F[0],F[1],S[1],P[1]],就错了
注意:开longlong!!!!

posted @ 2020-06-19 17:33  _Buffett  阅读(458)  评论(0编辑  收藏  举报