HDU 6755 - Fibonacci Sum(二项式定理+推式子)
其实是一道还好的题罢,虽然做了我 2147483647(bushi,其实是 1.5h),估计也只是因为 HDU 不支持数据下载所以错误总 debug 出来
首先看到 \(10^9+9\) 及斐波那契数列,顿时心里一个激灵,这题和通项公式逃不掉了(
套用斐波那契数列通项公式 \(f_n=\dfrac{1}{\sqrt{5}}((\dfrac{1+\sqrt{5}}{2})^n-(\dfrac{1-\sqrt{5}}{2})^n)\) 得:
\text{Ans}&=\sum\limits_{i=0}^nF_{ic}^k
\\&=\sum\limits_{i=0}^n(\dfrac{1}{\sqrt{5}}((\dfrac{1+\sqrt{5}}{2})^{ic}-(\dfrac{1-\sqrt{5}}{2})^{ic}))^k
\\&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n((\dfrac{1+\sqrt{5}}{2})^{ic}-(\dfrac{1-\sqrt{5}}{2})^{ic})^k
\end{aligned}
\]
看到二项式的 \(k\) 次方,可以套路地想到二项式定理,用二项式定理展开一下可继续推得:
\text{Ans}&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n((\dfrac{1+\sqrt{5}}{2})^{ic}-(\dfrac{1-\sqrt{5}}{2})^{ic})^k\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}(\dfrac{1+\sqrt{5}}{2})^{icj}(-(\dfrac{1-\sqrt{5}}{2})^{ic})^{k-j}\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}(\dfrac{1+\sqrt{5}}{2})^{icj}(\dfrac{1-\sqrt{5}}{2})^{ic(k-j)}(-1)^{k-j}
\end{aligned}
\]
方便起见,我们设 \(A=\dfrac{1+\sqrt{5}}{2},B=\dfrac{1-\sqrt{5}}{2}\),那么式子可进一步化为
\text{Ans}
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}A^{icj}B^{ic(k-j)}(-1)^{k-j}\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}A^{icj}B^{ick}\dfrac{1}{B^{icj}}(-1)^{k-j}\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{i=0}^n\sum\limits_{j=0}^k\dbinom{k}{j}(\dfrac{A}{B})^{icj}B^{ick}(-1)^{k-j}\\
&=\dfrac{1}{(\sqrt{5})^k}\sum\limits_{j=0}^k(-1)^{k-j}\dbinom{k}{j}\sum\limits_{i=0}^n(\dfrac{A}{B})^{icj}B^{ick}
\end{aligned}
\]
推到这里,前面一个 \(\sum\) 显然直接枚举是不会出问题的,至于后面一个 \(\sum\),如果我们设 \(P=(\dfrac{A}{B})^{cj}\times B^{ck}\),那么里面的式子可写为 \(\sum\limits_{i=0}^nP^i\),这显然就是一个等比数列求和的形式,直接求即可。
时间复杂度 \(Tk\log n\),顺带说一句,本题略微有点卡常,有以下卡常技巧:
- 式子里有些东西是可以预处理出来的,大可不必每枚举一遍 \(j\) 都重新快速幂计算一遍,否则常数肯定上天
- 在等比数列求和时,由于 \(10^9+9\) 是质数,可以通过欧拉降幂 \(a^m\equiv a^{m\bmod (10^9+8)}\pmod{10^9+9}\) 减少快速幂的指数,这样常数可小一半
const int S5=383008016;
const int MOD=1e9+9;
const int INV2=5e8+5;
const int MAXN=1e5;
int qpow(int x,ll e){
int ret=1;
for(;e;e>>=1,x=1ll*x*x%MOD) if(e&1) ret=1ll*ret*x%MOD;
return ret;
}
int IV5,A,B,MUL,fac[MAXN+5],ifac[MAXN+5];
void init_fac(int n){
for(int i=(fac[0]=ifac[0]=ifac[1]=1)+1;i<=n;i++) ifac[i]=1ll*ifac[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%MOD,ifac[i]=1ll*ifac[i-1]*ifac[i]%MOD;
}
int binom(int n,int k){return 1ll*fac[n]*ifac[k]%MOD*ifac[n-k]%MOD;}
int sum(int x,ll y){if(x==1) return (y+1)%MOD;return 1ll*(qpow(x,(y+1)%(MOD-1))-1+MOD)*qpow((x-1+MOD)%MOD,MOD-2)%MOD;}
void solve(){
ll n,c;int k;scanf("%lld%lld%d",&n,&c,&k);c%=(MOD-1);
int mul=qpow(IV5,k),ans=0,M=qpow(qpow(B,c),k),stp=qpow(MUL,c);
for(int i=0,pw=1;i<=k;i++,pw=1ll*pw*stp%MOD){
int t=1ll*pw*M%MOD;
int add=1ll*binom(k,i)*sum(t,n)%MOD;
if((k-i)&1) ans=(ans-add+MOD)%MOD;
else ans=(ans+add)%MOD;
} ans=1ll*ans*mul%MOD;printf("%d\n",ans);
}
int main(){
IV5=qpow(S5,MOD-2);
A=1ll*(1+S5)*INV2%MOD;
B=1ll*(1-S5+MOD)*INV2%MOD;
MUL=1ll*A*qpow(B,MOD-2)%MOD;
init_fac(MAXN);int qu;scanf("%d",&qu);
while(qu--) solve();
return 0;
}
HDU 6755 - Fibonacci Sum(二项式定理+推式子)的更多相关文章
- bzoj 3157 && bzoj 3516 国王奇遇记——推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
- BZOJ 3453 - tyvj 1858 XLkxc(插值+推式子)
题面传送门 首先根据我们刚学插值时学的理论知识,\(f(i)\) 是关于 \(i\) 的 \(k+1\) 次多项式.而 \(g(x)\) 是 \(f(x)\) 的前缀和,根据有限微积分那一套理论,\( ...
- 洛谷 P6031 - CF1278F Cards 加强版(推式子+递推)
洛谷题面传送门 u1s1 这个推式子其实挺套路的吧,可惜有一步没推出来看了题解 \[\begin{aligned} res&=\sum\limits_{i=0}^ni^k\dbinom{n}{ ...
- [HAOI2007]分割矩阵 DP+推式子
发现最近好少写博客啊(其实是各种摆去了) 更一点吧 这道题要求最小化均方差,其实凭直觉来说就是要使每个块分的比较均匀一点,但是单单想到想到这些还是不够的, 首先f[i][j][k][l][t]表示以( ...
- P3768 简单的数学题 杜教筛+推式子
\(\color{#0066ff}{ 题目描述 }\) 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ij ...
- bzoj 3157 & bzoj 3516 国王奇遇记 —— 推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3157 https://www.lydsy.com/JudgeOnline/problem.p ...
- HZOJ 20190727 T2 单(树上dp+乱搞?+乱推式子?+dfs?)
考试T2,考试时想到了40pts解法,即对于求b数组,随便瞎搞一下就oxxk,求a的话,很明显的高斯消元,但考试时不会打+没开double挂成10pts(我真sb),感觉考试策略还是不够成熟,而且感觉 ...
- luogu P4948 数列求和 推式子 简单数学推导 二项式 拉格朗日插值
LINK:数列求和 每次遇到这种题目都不太会写.但是做法很简单. 终有一天我会成功的. 考虑类似等比数列求和的东西 帽子戏法一下. 设\(f(k)=\sum_{i=1}^ni^ka^i\) 考虑\(a ...
- hdu 3117 Fibonacci Numbers 矩阵快速幂+公式
斐波那契数列后四位可以用快速幂取模(模10000)算出.前四位要用公式推 HDU 3117 Fibonacci Numbers(矩阵快速幂+公式) f(n)=(((1+√5)/2)^n+((1-√5) ...
随机推荐
- ES2020新特性记录
1.可选链操作符 // oldlet ret = obj && obj.first && obj.first.second// newlet ret = obj?.fi ...
- 想要彻底搞懂大厂是如何实现Redis高可用的?看这篇文章就够了!(1.2W字,建议收藏)
高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%.如果 ...
- spring源码分析(二)- 容器基础
1.基本用法 用过Spring的都知道,bean是Spring中最基础也是最核心的.首先看一个简单的例子. 一个类和一个配置文件 package bean; public class MyBean { ...
- 是兄弟就来摸鱼 Scrum Meeting 博客汇总
是兄弟就来摸鱼 Scrum Meeting 博客汇总 一.Alpha阶段 第一次Scrum meeting 第二次Scrum meeting 第三次Scrum meeting 第四次Scrum mee ...
- [no_code][Beta]测试报告
项目 内容 2020春季计算机学院软件工程(罗杰 任健) 2020春季计算机学院软件工程(罗杰 任健) 作业要求 测试报告 我们在这个课程的目标是 设计出一个OCR表单处理软件 这个作业在哪个具体方面 ...
- [no code][scrum meeting] Beta 2
例会时间:5月14日11:30,主持者:乔玺华 下次例会时间:5月15日11:30,主持者:肖思炀 一.工作汇报 人员 昨日完成任务 明日要完成的任务 乔玺华 - 开issue,分配时间 黎正宇 - ...
- 大闸蟹的OO第二单元总结
OO的第二单元是讲多线程的协作与控制,三次作业分别为FAFS电梯,ALS电梯和三部需要协作的电梯.三次作业由浅入深,让我们逐渐理解多线程的工作原理和运行状况. 第一次作业: 第一次作业是傻瓜电梯,也就 ...
- MyBatis源码分析(七):动态代理(Mybatis核心机制)
一.动态代理 动态代理是一种比较高级的代理模式,它的典型应用就是Spring AOP. 在传统的动态代理模式中,客户端通过ProxySubject调用RealSubject类的request( )方法 ...
- Kill杀死Linux中的defunct进程(僵尸进程)
一.什么是defunct进程(僵尸进程)? 在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状 ...
- JAVA笔记15__TCP服务端、客户端程序 / ECHO程序 /
/** * TCP:传输控制协议,采用三方握手的方式,保证准确的连接操作. * UDP:数据报协议,发送数据报,例如:手机短信或者是QQ消息. */ /** * TCP服务器端程序 */ public ...