题目大意
给定
l,r,k
,求出:
∑i=lr(fi+2k)
f(n)=n,n≤1
f(n)=f(n−1)+f(n−2),n>1
数据范围
k≤500 , 0≤l≤r≤1018
题解
因为
(xk)=x!k!(x−k)!
,因此
(xk)
可以写成一个
k
次的多项式,再前缀和减一下,问题变成要求:
令 a=1+5√2,b=1−5√2 ,我们知道:
fn=5√5(an−bn) ,因此有:
===∑i=0rfki∑i=0r(5√5(ai−bi))k(5√5)k∑i=0r∑j=0k(kj)aij(−b)i(k−j)(5√5)k∑j=0k(−1)k−j(kj)∑i=0n(ajbk−j)i
我们现在将每个数表示成 x=a+b5√ 的形式,我们可以很轻松的定义这些数的加减乘运算,那么最后我们相当于枚举 j ,求出
因为每个 fi 都是整数,因此最终求出来的数 x 的
时间复杂度:
O(k2logr)