题意:给出n,y,x,s,已知
f(n)=2∗f(n−1)+f(n−2)
,
g(n)=∑ni=0f(i)2
,求
xg(n∗y)%(s+1)
.
思路:看到递推公式,第一反应是可以用矩阵优化来求解
f(n)
,因为递推的关系,求出前几个
g(n)
上OEIS搜了一波,发现
g(n)=f(n)∗f(n−1)/2
,因为指数肯定很大,而且
s+1
也不是素数.然后学姐就告诉了一个公式:
AB%C=AB%ϕ(C)+ϕ(C)%C
那么 A=x , B=f(n⋅y)⋅f(n⋅y+1)2 , C=s+1 .
因为取模运算不能有除法,所以这里要求逆元.
但是不求逆元也是可以的.
若b|a,则abmodp=amodpbb
本题刚好满足 2| (f(ny)⋅f(ny+1))
证明:
ab≡ymodp
⇒ab=px+y
⇒a=pbx+by
⇒amodpb=by
⇒amodpbb=y
证毕.
代码链接:https://github.com/PhyCoe/ACM-Training/blob/master/Code/hdu5895.cpp