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 的值。现在佳佳告诉你了一个 n 和 m,请求出 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 1 1 1 0 0 0 1 1 0 0 0 1 ] = [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!!!!