题目链接

51nod1236

题解

用特征方程求得斐波那契通项:

\[f(n) = \frac{(\frac{1 + \sqrt{5}}{2})^{n} - (\frac{1 - \sqrt{5}}{2})^{n}}{\sqrt{5}}
\]

那么

\[\begin{aligned}
ans &= \sum\limits_{i = 1}^{n} (\frac{(\frac{1 + \sqrt{5}}{2})^{i} - (\frac{1 - \sqrt{5}}{2})^{i}}{\sqrt{5}})^{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}{k \choose 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}{k \choose j}(-1)^{k - j}\sum\limits_{i = 1}^{n} (\frac{1 + \sqrt{5}}{2})^{ij}(\frac{1 - \sqrt{5}}{2})^{i(k - j)} \\
&= (\frac{1}{\sqrt{5}})^{k}\sum\limits_{j = 0}^{k}{k \choose j}(-1)^{k - j}\sum\limits_{i = 1}^{n} ((\frac{1 + \sqrt{5}}{2})^{j}(\frac{1 - \sqrt{5}}{2})^{k - j})^{i}
\end{aligned}
\]

后面用等比数列求和即可

复杂度\(O(klogn)\)

#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<map>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
#define cls(s,v) memset(s,v,sizeof(s))
#define mp(a,b) make_pair<int,int>(a,b)
#define cp pair<int,int>
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 0x3f3f3f3f,P = 1000000009;
inline LL read(){
LL out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = 0; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 1) + (out << 3) + c - 48; c = getchar();}
return flag ? out : -out;
}
const LL s5 = 383008016;
LL N,K,fac[maxn],inv[maxn],fv[maxn],v1[maxn],v2[maxn];
void init(){
fac[0] = fac[1] = inv[0] = inv[1] = fv[0] = fv[1] = 1;
v1[0] = v2[0] = 1;
for (int i = 2; i < maxn; i++){
fac[i] = fac[i - 1] * i % P;
inv[i] = 1ll * (P - P / i) * inv[P % i] % P;
fv[i] = fv[i - 1] * inv[i] % P;
}
v1[1] = (1 + s5) * inv[2] % P; v2[1] = ((1 - s5) % P + P) % P * inv[2] % P;
for (int i = 2; i < maxn; i++){
v1[i] = v1[i - 1] * v1[1] % P;
v2[i] = v2[i - 1] * v2[1] % P;
}
}
inline LL qpow(LL a,LL b){
LL re = 1; a %= P;
for (; b; b >>= 1,a = a * a % P)
if (b & 1) re = re * a % P;
return re;
}
inline LL Inv(LL a){
if (a < maxn) return inv[a];
return qpow(a,P - 2);
}
inline LL C(LL n,LL m){
if (m > n) return 0;
return fac[n] * fv[m] % P * fv[n - m] % P;
}
int main(){
init();
int T = read();
while (T--){
N = read(); K = read(); LL ans = 0;
for (int j = 0; j <= K; j++){
LL t,tmp;
t = v1[j] * v2[K - j] % P;
tmp = t == 1 ? N % P : ((qpow(t,N + 1) - t) % P + P) % P * Inv(t - 1) % P;
tmp = tmp * C(K,j) % P;
if ((K - j) & 1) ans = (ans + P - tmp) % P;
else ans = (ans + tmp) % P;
}
printf("%lld\n",ans * qpow(s5,K * (P - 2)) % P);
}
return 0;
}

51nod1236 序列求和 V3 【数学】的更多相关文章

  1. 51nod1236 序列求和 V3

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

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

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

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

    51nod_1236_序列求和 V3 _组合数学 Fib(n)表示斐波那契数列的第n项,Fib(n) = Fib(n-1) + Fib(n-2).Fib(0) = 0, Fib(1) = 1. (1, ...

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

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

  5. 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 ...

  6. 51nod 1258 序列求和 V4

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1258 1258 序列求和 V4  基准时间限制:8 秒 空间限制:131 ...

  7. 【51Nod1258】序列求和V4(FFT)

    [51Nod1258]序列求和V4(FFT) 题面 51Nod 多组数据,求: \[Ans=\sum_{i=1}^ni^k,n\le 10^{18},k\le50000\] 题解 预处理伯努利数,时间 ...

  8. HDU 2254 奥运(矩阵高速幂+二分等比序列求和)

    HDU 2254 奥运(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 2254 奥运 题意:  中问题不解释. 分析:  依据floyd的算法,矩阵的k次方表示这个矩阵走了k步.  所以k ...

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

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

随机推荐

  1. zookeepeer使用zkCli.sh命令

    一.连接服务器端 [root@sxl132 zookeepeer]# ./bin/zkCli. Connecting to -- ::, [myid:] - INFO [main:Environmen ...

  2. C# 获取电脑MAC地址,IP地址,物理内存,CPU序列号,硬盘ID..........................

    上班很忙,自己做个记录 代码如下: 需要引入:System.Management 代码如下: using System; using System.Collections.Generic; using ...

  3. flask_admin 笔记七 扩展功能

    高级功能 1,开启CSRF保护 要将CSRF保护添加到由ModelView实例生成的表单中,请通过指定form_base_class参数在ModelView子类中使用SecureForm类: from ...

  4. 转:SpringMVC之类型转换Converter(GenericConverter)

    转: http://blog.csdn.net/fsp88927/article/details/37692215 SpringMVC 之类型转换 Converter 1.1 目录 1.1 目录 1. ...

  5. Spring Cloud :断路器集群监控(Turbine)

    一. 简介      上一篇文章我们已经实现了对单个服务实例的监控,当然在实际应用中,单个实例的监控数据没有多大的价值,我们更需要的是一个集群系统的监控信息,这时我们就需要引入Turbine.Turb ...

  6. Individual Project - Word_frequency

    0x00 预先准备和时间规划 1.因为要用到visual studio 2013,准备学习C#,预计一天时间能基本使用. 3.了解需求并设计基本数据结构与大致流程 20min 2.根据提议实现simp ...

  7. BugPhobia发布篇章:学霸在线系统测试报告

    0x00 :测试报告版本管理 版本号 具体细节 修订时间 V 1.0 整理第一轮迭代用户管理和登陆注册的功能性验证测试,预计将继续网页对浏览器版本的兼容性测试 2015/11/12 V1.0.1 整理 ...

  8. 2-Twenty First Scrum Meeting-20151221

    任务安排 成员 今日完成 明日任务 闫昊 请假(数据库)   唐彬 请假(数据库)   史烨轩  尝试使用downloadmanager对notification进行更新  尝试使用downloadm ...

  9. Linux内核分析——可执行程序的装载

    链接的过程 首先运行C预处理器cpp,将C的源程序(a.c)翻译成ASCII码的中间文件(a.i) 接着C编译器ccl,将a.i翻译成ASCII汇编语言文件a.s 接着运行汇编器as,将a.s翻译成可 ...

  10. 《Linux内核设计与实现》 第五周 读书笔记(第十八章)

    第18章 调试 20135307张嘉琪 18.1 准备开始 18.2 内核中的bug 内核中的bug多种多样,它们的产生可以有无数的原因,同时它们的表象也变化多端,从明白无误的错误代码(比如,没有把正 ...