这题炒鸡简单,只要第一步想对了后面顺风顺水QWQ(然鹅我没想到)

前置芝士:

  1. 斐波那契数列通项公式

  2. 等比数列求和公式

  3. 二项式定理

这题要求的就是 \(\sum_{i=1}^n Fib(i)^k\) ,其中 Fib 就是斐波那契数列

如果说没有 k 的话怎么做?仍然不会.jpg

于是我们直接想带 k 的答案吧...

我们考虑 把斐波那契数列的通项公式带进去

然后鬼都知道怎么做了,就是一堆化式子:

\[\begin{aligned}ANS=& \sum_{i=1}^n Fib(i)^k\\=& \sum_{i=1}^{n} \Big({ {(1+\sqrt 5 )^i\over2 } -{(1-\sqrt 5)^i \over 2} \over \sqrt 5} \Big)^k \\=& \big({1\over \sqrt 5}\big)^k \sum_{i=1}^{n}\sum_{j=0}^k (-1)^{k-j} \begin{pmatrix} k\\j \end{pmatrix}\Big( {1+\sqrt 5 \over2 }\Big)^{ij} \Big( {1-\sqrt 5 \over2 }\Big)^{i(k-j)} \\=& \big({1\over \sqrt 5}\big)^k\sum_{j=0}^k (-1)^{k-j} \begin{pmatrix} k\\j \end{pmatrix} \sum_{i=1}^{n} \Big( \big( {1+\sqrt 5 \over2 }\big)^j \big( {1-\sqrt 5 \over2 }\big)^{k-j} \Big)^i \end{aligned}\]

注意公式后面的部分可套等比数列公式,然后 快速模 求解...

于是我们只要预处理一下阶乘 以及 \(({1+\sqrt 5\over 2})^i\) 、 \(({1-\sqrt 5\over 2})^i\) ,就可以 \(O(k)\) 时间内线性求解了,并且总复杂度也是 \(O(k)\) (当然,不算快速幂的话 XD)

code

不知道打的什么鬼东西巨丑无比...

//by Judge
#include<cstdio>
#include<cstring>
#include<iostream>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
#define ll long long
using namespace std;
const int s5=383008016;
const int mod=1e9+9;
const int M=1e5+3;
typedef int arr[M];
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
inline int MO(ll x){return x-x/mod*mod;}
inline int mul(int x,int y){return MO(1ll*x*y);}
inline int dec(int x,int y){return x<y?x-y+mod:x-y;}
inline int inc(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline ll read(){ ll x=0,f=1; char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} char sr[1<<21],z[20];int CCF=-1,Z;
inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;}
inline void print(int x,char chr='\n'){if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x;while(z[++Z]=x%10+48,x/=10);while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr;
} ll n; int k,t,MX=1e5,tmp,ans,inv[1000003]; arr fac,ifac,v1,v2;
inline void prep(Rg int n){v1[0]=v2[0]=fac[0]=fac[1]=inv[0]=inv[1]=ifac[0]=ifac[1]=1;fp(i,2,n) inv[i]=mul(mod-mod/i,inv[mod%i]);fp(i,2,n) fac[i]=mul(fac[i-1],i),ifac[i]=mul(ifac[i-1],inv[i]);v1[1]=mul(s5+1,inv[2]),v2[1]=mul(mod+1-s5,inv[2]);fp(i,2,n) v1[i]=mul(v1[i-1],v1[1]),v2[i]=mul(v2[i-1],v2[1]);fp(i,n+1,MX=5e5) inv[i]=mul(mod-mod/i,inv[mod%i]);
}
inline int qpow(int x,ll p=mod-2,int s=1){for(;p;p>>=1,x=mul(x,x)) if(p&1) s=mul(s,x); return s;
}
inline int Inv(int x){return x<=MX?inv[x]:mul(mod-mod/x,Inv(mod%x));}
inline int C(int n,int m){return mul(fac[n],mul(ifac[m],ifac[n-m]));}
int main(){ prep(MX); int T=read(); ll t,tmp,ans,n,k;for(;T;--T){ n=read(),k=read(),ans=0;fp(j,0,k){ t=mul(v1[j],v2[k-j]),tmp=t==1?n%mod:mul(dec(qpow(t,n+1),t),Inv(t-1));tmp=mul(tmp,C(k,j)),ans=(k^j)&1?dec(ans,tmp):inc(ans,tmp);} print(mul(ans,qpow(s5,(1ll*k*(mod-2)%(mod-1)+mod-1))));} return Ot(),0;
}

转载于:https://www.cnblogs.com/Judge/p/10731573.html

51nod1236 序列求和 V3相关推荐

  1. 蓝桥杯:入门训练 序列求和

    蓝桥杯:入门训练 序列求和 问题描述 求1+2+3+...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+...+n的值. 样例输入 4 样例输出 10 ...

  2. python 分数序列求和公式_Python分数序列求和,编程练习题实例二十四

    本文是关于Python分数序列求和的应用练习,适合菜鸟练习使用,python大牛绕行哦. Python练习题问题如下: 问题简述:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13 要 ...

  3. 蓝桥杯 入门训练 试题集汇总 【A+B问题、序列求和、圆的面积、Fibonacci数列】

    练习系统 目   录 BEGIN-1 A+B问题 BEGIN-2 序列求和 BEGIN-3 圆的面积 BEGIN-3 Fibonacci数列 BEGIN-1 A+B问题 资源限制 时间限制:1.0s ...

  4. 入门训练 序列求和 c语言

    入门训练 序列求和 问题描述 求1+2+3+-+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+-+n的值. 样例输入 4 样例输出 10 样例输入 100 ...

  5. 【算法设计与分析】08 序列求和的方法

    本篇文章学习数列求和的一些方法.这些方法对后面学习算法的时间复杂度非常有帮助. 文章目录 1. 数列求和公式 1.1 二分搜索的时间复杂度求解 2 估计和式上届的放大法 3 估计和式渐近的界 4 总结 ...

  6. 小学奥数_7829神奇序列求和 python

    http://noi.openjudge.cn/math/7829/ """小学奥数_7829神奇序列求和 http://noi.openjudge.cn/math/78 ...

  7. 蓝桥杯 入门训练 序列求和

    [蓝桥杯入门训练](BEGIN-2 序列求和) 问题描述 求1+2+3+-+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+-+n的值. 样例输入 4 样例 ...

  8. 蓝桥杯 BEGIN-2 入门训练 序列求和

    BEGIN-2 入门训练 序列求和  问题描述 求1+2+3+...+n的值. 输入格式 输入包括一个整数n. 输出格式 输出一行,包括一个整数,表示1+2+3+...+n的值. 样例输入 4 样例输 ...

  9. POJ NOI MATH-7829 神奇序列求和

    问题链接:POJ NOI MATH-7829 神奇序列求和. 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个序列,初始时只有两个数x和y,之后每次操作时,在原序列的任意两个相邻数 ...

最新文章

  1. 活体检测方法概述与总结
  2. 超详细的HTTP面试题
  3. Aptana插件安装到eclipse和myeclipse的详细过程
  4. 学成在线--7.CMS页面管理开发(异常处理)
  5. ue4 android vulkan,在Android用vulkan完成蓝绿幕扣像
  6. 【Python】七段数码管绘制问题
  7. [iOS-UI]点击清空按钮,却会有提交的感觉
  8. 西门子PID程序,西门子PLC 1200和G120西门子 变频器Modbud RTU通讯,带西门子触摸屏,带变频器参数/Modbus通讯报西门子PID程序
  9. 通过PS的图层样式制作透明的玻璃字
  10. Android程序崩溃处理
  11. 外卖订单语音通知功能如何实现?(附外卖订单语音通知模板)
  12. 2017-12-12
  13. 第六十六章 Caché 函数大全 $TRANSLATE 函数
  14. 可视化篇:Echarts2.0引入百度地图
  15. Java和部门管理的那些事情
  16. java计算机毕业设计springboot+vue足球联赛管理系统
  17. 拿什么拯救你?程序员的虚荣心...
  18. Finder教程——了解 Mac 上的“访达”
  19. IOS马甲包(诚招大量开发)
  20. cleverhans与foolbox的对比使用(pytorch+python3)

热门文章

  1. 一个自己写的有关数据库的treeview.
  2. C语言const使用
  3. 关键字 'USER' 附近有语法错误
  4. python_文件处理
  5. 无线局域网技术白皮书
  6. java 操作 ES 的方式 整理总结
  7. Object的finalize方法
  8. Shrio Unable to execute ‘doFinal‘ with cipher instance
  9. PyTorch基础(一)-----张量(Tensor)
  10. 矩阵乘法和快速幂的一些优化和剪枝