题目大意:
求出斐波那契中的 第 k*i+b 项的和。
思路分析:
定义斐波那契数列的矩阵
f(n)为斐波那契第n项
F(n) = f(n+1)
f(n)
那么可以知道矩阵
A = 1 1
1 0
使得 F(n) = A * F(n+1)
然后我们化简最后的答案
sum = F(b) + F(K+b) + F (2*k +b)....
sum = F(b) + A^k F(b) + A^2k F(b).....
sum = (E+A^k + A^2k.....)*F(b)
那么我们把 矩阵 A^k 定义为矩阵 K。
再递推上面的求和公式。
E E * SUM = SUM + E
0 K E K
所以构造一个内嵌矩阵的矩阵。
然后求出和乘以F(b)即可。
#include
#include
#include
#include
#define N 2 using namespace std; typedef long long LL; LL mod; struct matrix { LL data[N][N]; friend matrix operator * (const matrix A,const matrix B) { matrix res; memset(res.data,0,sizeof res.data); for(int i=0;i
>=1; origin=origin*origin; } return res; } supermax Do(supermax origin,LL n) { supermax res; for(int i=0;i
>=1; origin=origin*origin; } return res; } int main() { memset(zero.data,0,sizeof zero.data); memset(E.data,0,sizeof E.data); for(int i=0;i