51nod_1236_序列求和 V3 _组合数学

Fib(n)表示斐波那契数列的第n项,Fib(n) = Fib(n-1) + Fib(n-2)。Fib(0) = 0, Fib(1) = 1。

(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...)

F(n, k) = Fib(n)^k(Fib(n)的k次幂)。
S(n, k) = F(1, k) + F(2, k) + ...... F(n, k)。
 
例如:S(4, 2) = 1^2 + 1^2 + 2^2 + 3^2 = 15。
给出n和k,求S(n, k) Mod 1000000009的结果。

大力展开题.....
fib的通项是$f(n)=\frac{1}{\sqrt 5}((\frac{1+\sqrt 5}{2})^n-(\frac{1-\sqrt 5}{2})^n)$

$S(n,k)=\frac{1}{\sqrt 5^k}\sum\limits_{i=1}^{n}((\frac{1+\sqrt 5}{2})^i-(\frac{1-\sqrt 5}{2})^i)^k$

$=\frac{1}{\sqrt 5^k}\sum\limits_{i=1}^{n}\sum\limits_{j=0}^{k}C(k,j)*(-1)^{k-j}*(\frac{1+\sqrt 5}{2})^{ij}*(\frac{1-\sqrt 5}{2})^{i(k-j)}$

$=\frac{1}{\sqrt 5^k}\sum\limits_{j=0}^{k}C(k,j)*(-1)^{k-j}\sum\limits_{i=1}^{n}(\frac{1+\sqrt 5}{2})^{ij}*(\frac{1-\sqrt 5}{2})^{i(k-j)}$

后面是一个等比数列求和的形式。
根号5有两种解决办法,第一种是找到一个k,使得k*k mod p=5。
第二种是把$a+b\sqrt 5$当成一个int。
 
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long ll;
#define mod 1000000009
#define N 100050
#define G5 383008016
ll fac[N],inv[N];
ll P,Q;
ll qp(ll x,ll y) {
x=(x%mod+mod)%mod;
ll re=1; for(;y;y>>=1ll,x=x*x%mod) if(y&1ll) re=re*x%mod; return re;
}
void init() {
int i;
for(fac[0]=1,i=1;i<=100000;i++) fac[i]=fac[i-1]*i%mod;
inv[100000]=qp(fac[100000],mod-2);
for(i=99999;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod;
}
ll C(ll n,ll m) {
return fac[n]*inv[m]%mod*inv[n-m]%mod;
}
ll Sum(ll x,ll n) {
if(x==1) return n%mod;
if(x==0) return 0;
return (qp(x,n+1)-x)%mod*qp(x-1,mod-2)%mod;
}
ll solve(ll n,int K) {
int j; ll ans=0;
for(j=0;j<=K;j++) {
int opt=((K-j)&1)?-1:1;
ll t1=C(K,j),t2=opt,t3=Sum(qp(P,j)*qp(Q,K-j)%mod,n);
ans=((ans+t1*t2%mod*t3%mod)%mod+mod)%mod;
}
return ans;
}
int main() {
init();
ll i2=qp(2,mod-2);
P=(1+G5)*i2%mod; Q=((1-G5)*i2%mod+mod)%mod;
int T;
ll n; int K;
scanf("%d",&T);
ll ig5=qp(G5,mod-2);
while(T--) {
scanf("%lld%d",&n,&K);
printf("%lld\n",qp(ig5,K)*solve(n,K)%mod);
}
}

51nod_1236_序列求和 V3 _组合数学的更多相关文章

  1. 51nod1236 序列求和 V3

    这题炒鸡简单,只要第一步想对了后面顺风顺水QWQ(然鹅我没想到) 前置芝士: 斐波那契数列通项公式 等比数列求和公式 二项式定理 这题要求的就是 \(\sum_{i=1}^n Fib(i)^k\) , ...

  2. 51nod1236 序列求和 V3 【数学】

    题目链接 51nod1236 题解 用特征方程求得斐波那契通项: \[f(n) = \frac{(\frac{1 + \sqrt{5}}{2})^{n} - (\frac{1 - \sqrt{5}}{ ...

  3. [51nod1236] 序列求和 V3(斐波那契数列)

    题面 传送门 题解 把求和的柿子用斐波那契数列的通项公式展开 \[ \begin{aligned} Ans &=\sum\limits_{i = 1}^{n} \left(\frac{(\fr ...

  4. BZOJ_4517_[Sdoi2016]排列计数_组合数学

    BZOJ_4517_[Sdoi2016]排列计数_组合数学 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[ ...

  5. HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)

    HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意:  g(i)=k*i+b;i为变量.  给出 ...

  6. HDU 5358 First One 求和(序列求和,优化)

    题意:给定一个含n个元素的序列,求下式子的结果.S(i,j)表示为seq[i...j]之和.注:对于log20可视为1.数据量n<=105. 思路:即使能够在O(1)的时间内求得任意S,也是需要 ...

  7. 51NOD 1258 序列求和 V4 [任意模数fft 多项式求逆元 伯努利数]

    1258 序列求和 V4 题意:求\(S_m(n) = \sum_{i=1}^n i^m \mod 10^9+7\),多组数据,\(T \le 500, n \le 10^{18}, k \le 50 ...

  8. BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学

    BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学 Description     约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛, ...

  9. BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理

    BZOJ_3129_[Sdoi2013]方程_组合数学+容斥原理 Description 给定方程     X1+X2+. +Xn=M 我们对第l..N1个变量进行一些限制: Xl < = A ...

随机推荐

  1. TPM:dTPM(硬件)和fTPM(固件模拟的软件模块)

    转:Bitlocker.TPM和系统安全 自从微软在Windows Vista首次引入Bitlocker以来,它已经越来越多的出现在我们的周围.尤其是企业用户,Bitlocker的保护已经变得不可缺少 ...

  2. 用Putty连接Linux

    随着linux应用的普及,linux管理越来越依赖远程管理.在各种telnet类工具中,putty是其中最出色的一个. 一.Putty简介     Putty是一个免费小巧的Win32平台下的teln ...

  3. HDU 2242 考研路茫茫——空调教室(边双连通)

    HDU 2242 考研路茫茫--空调教室 题目链接 思路:求边双连通分量.然后进行缩点,点权为双连通分支的点权之和,缩点完变成一棵树,然后在树上dfs一遍就能得出答案 代码: #include < ...

  4. Django--分页、session

    分页 分页的实现,是由我们自己写的后端代码组建而成,这段写的代码可以直接放在以后的任何分页结构中使用. 先来谈谈原始逻辑: 主页代码如下: <!DOCTYPE html> <html ...

  5. Npm 被公司墙解决方法

    npm被公司墙了,不能用npm安装任何包应用了. npm ERR! Darwin npm ERR! argv "/usr/local/Cellar/node/6.4.0/bin/node&q ...

  6. ssh port forwarding

    SSH端口转发,总是忘记,今天记录下.端口转发有两种,一个是local一个是remote(可能还有一种dynamic,还没有研究) 贴个链接 https://www.ssh.com/ssh/tunne ...

  7. 关于React的Container&Presentational Component模型结构分析

    react.js javascript 3 之前翻译了两篇关于Container&Presentational Component模型的文章,一篇是基础的Container和Component ...

  8. ADO.NET Data Service

    关于ADO.NET Entity Framework部分的内容见ADO.NET Entity Framework(1-4) http://www.cnblogs.com/foundation/arch ...

  9. python 基础 1.5 python数据类型(三)--元组

    一.python的数据类型 序列--元组 1.序列 1>字符串,列表,元组都是序列. 2>序列的两个特点是索引操作符和切片操作符 索引操作符:我们可以从序列中抓取一个特定项目 切片操作符: ...

  10. 【BZOJ3319】黑白树 并查集

    [BZOJ3319]黑白树 Description 给定一棵树,边的颜色为黑或白,初始时全部为白色.维护两个操作:1.查询u到根路径上的第一条黑色边的标号.2.将u到v    路径上的所有边的颜色设为 ...