CodeChef AUG14 SIGFIB

  来自2016集训队作业。
  CC毒瘤题真是多。。。


  求 i+j+k=nijkfifjfkmodm ,其中 fi 是斐波那契数列。 n1018,m105


  答案的生成函数是 (zDz1zz2)3 ,展开后可知答案是 [zn](z+1/z)3F(z)6 ,其中 F(z)=z1zz2 ,是 fi 的生成函数。
  我们考虑怎么展开 [zn]F(z)6 得到其关于 fn 的表达式。
  设 ϕ,ϕ^ 分别为 z2z1=0 大于0和小于0的两个根。
  我们知道 F(z)=15(11ϕz11ϕ^z) ,先来试试算个 F(z)2
  

  5F(z)2    =(11ϕz)22F(z)/z+(11ϕ^z)2=n(n+11)(ϕn+ϕ^n)zn2F(z)/z

  注意到
  
  ϕn+ϕ^n      =[zn](11ϕz+11ϕ^z)=[zn]2(ϕ+ϕ^)z(1ϕz)(1ϕ^z)=[zn](2F(z)/zF(z))=2fn+1fn  

  因此 [zn]F(z)2=(2nfn+1(n+1)fn)/5 。我们可以用类似的方法算出 kkfkfnk , 然后我们算 F(z)6 的时候可以先将其二项式展开然后合并成两部分的和,会得到一系列的各种形式的 F(z)3 ,接着再用 F(z)2 kkfkfnk 凑出来。。。
  于是我们最后得到的大概会是 [zn]F(z)6=6k=0Cn,kfn+k 的形式,其中 Cn,k 里可能有关于 (n+O(k)O(k)) 的组合数之类。因为下指标很小所以组合数可以暴力算,剩下的 fn 直接矩乘算。
  要注意会有一个 56 的分母,我们把 m <script type="math/tex" id="MathJax-Element-81">m</script>乘上它之后再做,最后再除掉他就好。
   (以上都是未经实践的口胡)
   其实一开始大力MMA就可以得到系数了
  用有理生成函数的一般展开定理也可以用来解这个系数,但是得到展开里的多项式也要一点技巧(虽然可以暴力),我打算以后用这个技巧 出题干点奇怪的事所以就不写在这里了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值