【杭电多校2020】Fibonacci Sum【斐波拉契通项】【推式子】
题意:设FiF_iFi为斐波拉契数列,求
∑i=0N(FiC)k\sum_{i=0}^N(F_{iC})^ki=0∑N(FiC)k
模109+910^9+9109+9
N,C≤1018,k≤105N,C\leq10^{18},k\leq10^5N,C≤1018,k≤105
把斐波拉契暴力拆开
FiC=15[(1+52)iC−(1−52)iC]F_{iC}=\frac 1 {\sqrt{5}}[(\frac {1+\sqrt{5}}2)^{iC}-(\frac {1-\sqrt{5}}2)^{iC}]FiC=51[(21+5)iC−(21−5)iC]
为了方便,忽略常数写成
Fic=Ai−BiF_{ic}=A^i-B^iFic=Ai−Bi
所以
ans=∑i=0N(Ai−Bi)kans=\sum_{i=0}^N(A^i-B^i)^kans=i=0∑N(Ai−Bi)k
=∑i=0N∑j=0k(kj)(−1)jA(k−j)iBj=\sum_{i=0}^N\sum_{j=0}^k\binom kj(-1)^jA^{(k-j)i}B^j=i=0∑Nj=0∑k(jk)(−1)jA(k−j)iBj
=∑i=0k(−1)i(kj)∑j=0N(Ak−jBj)i=\sum_{i=0}^k(-1)^i\binom kj\sum_{j=0}^N(A^{k-j}B^j)^i=i=0∑k(−1)i(jk)j=0∑N(Ak−jBj)i
等比数列求和即可
复杂度O(nlogM)O(n\log M)O(nlogM)
推式子先从简单的入手
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
#define MAXN 100005
typedef long long ll;
const int MOD=1e9+9,N=1e5,p=383008016,A=(p+1ll)*(MOD+1)/2%MOD,B=(1ll+MOD-p)*(MOD+1)/2%MOD;
inline int qpow(int a,int p)
{int ans=1;while (p){if (p&1) ans=(ll)ans*a%MOD;a=(ll)a*a%MOD;p>>=1;}return ans;
}
int fac[MAXN],finv[MAXN],px[MAXN],py[MAXN];
int main()
{fac[0]=1;for (int i=1;i<=N;i++) fac[i]=(ll)fac[i-1]*i%MOD;finv[N]=qpow(fac[N],MOD-2);for (int i=N-1;i>=0;i--) finv[i]=(ll)finv[i+1]*(i+1)%MOD;int T;scanf("%d",&T);while (T--){ll n,c;int k;scanf("%lld%lld%d",&n,&c,&k);c%=MOD-1;int ans=0;int x=qpow(A,c),y=qpow(B,c);px[0]=py[0]=1;for (int i=1;i<=k;i++) px[i]=(ll)px[i-1]*x%MOD,py[i]=(ll)py[i-1]*y%MOD;for (int i=0;i<=k;i++) {int t=((i&1)? MOD-1ll:1ll)*fac[k]%MOD*finv[i]%MOD*finv[k-i]%MOD;int a=(ll)px[k-i]*py[i]%MOD;if (a==1) ans=(ans+(n+1ll)%MOD*t)%MOD;else ans=(ans+t*(qpow(a,(n+1ll)%(MOD-1))-1ll)%MOD*qpow(a-1,MOD-2))%MOD;}ans=(ll)ans*qpow(p,MOD-1-k)%MOD;printf("%d\n",ans);}return 0;
}
【杭电多校2020】Fibonacci Sum【斐波拉契通项】【推式子】相关推荐
- HDU1568 Fibonacci【斐波拉契数列】
Fibonacci Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- 欧拉降幂 ---- 2020 杭电多校[E - Fibonacci Sum]+欧拉降幂+和式的调整+二次剩余+毒瘤卡常
解题思路: 首先你得知道斐波那契的通项式子:首先你得知道斐波那契的通项式子:首先你得知道斐波那契的通项式子: F(n)=15[(1+52)n−(1−52)n]F(n) = {1\over\sqrt5} ...
- C++large fibonacci大斐波那契数列的实现(附完整源码)
C++large fibonacci大斐波那契数列的实现算法 C++large fibonacci大斐波那契数列的实现算法完整源码(定义,实现,main函数测试) 用于对任意大数执行算术运算的库lar ...
- [CS101] 转载:浅议Fibonacci(斐波纳契)数列求解
原文转载自林健随笔的"浅议Fibonacci(斐波纳契)数列求解" Fibonacci 数列 描述了动物繁殖数量.植物花序变化等自然规律.作为一个经典的数学问题,Fibonacci ...
- Python - Python3 编程第一步 Fibonacci series: 斐波纳契数列
Fibonacci series: 斐波纳契数列, 两个元素的总和确定了下一个数,例如:1 1 2 3 5 8 13 21 34 55 Python程序如下: def fibonacci1(n):a, ...
- python斐波拉契数列(Fibonacci)
##斐波拉契数列(Fibonacci) def Fibonacci(m):n,a,b=0,0,1 while n<m:print(b)a,b=b,a+bn +=1 return 'Done' # ...
- 斐波拉契(Fibonacci)数列
斐波拉契数列一般指斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故 ...
- 西电复试之——真题2013A 斐波那契数列
西电复试之--真题2013A 斐波那契数列 F(0)=7; F(1)=11; F(n)=F(n-1)+F(n-2); #include<iostream> using namespace ...
- HDU - 1568 Fibonacci (斐波那契,大数取前几位
2007年到来了.经过2006年一年的修炼,数学神童zouyu终于把0到100000000的Fibonacci数列 (f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>= ...
最新文章
- SQL Server 存储过程的分页方案比拼
- “Linux频道”有链接打不开
- Android 触摸事件处理机制
- CodeForces - 831D Office Keys
- java idea 模块_使用IntelliJ IDEA搭建多maven模块JAVA项目
- 怎么让员工服从管理_职场 | 在职场中,遇到不服从管理的员工,该怎么办呢?...
- 使用pandas进行量化回测(akshare)
- 整理C# 二进制,十进制,十六进制 互转
- 【NOILinux】VmWare15使用技巧
- 每周荐书:微服务、SQL调优、机器学习(评论送书)
- 调通sina33下的AP6212A0(WIFI+BT)(V1.1版本)
- DIY 手动制作自己的win pe
- 林业行业上的调查规划设计资质办理管理办法
- nginx php spawn-fcgi,搭建CentOS+NGINX+Spawn-fcgi+CPP开发环境
- MySQL数据库:SQL语句优化
- SQL语句基础4/select查询语句练习
- 乐华娱乐IPO搁浅:王一博是旗下艺人 CMC阿里字节是股东
- DCMTK读取压缩格式的DICOM文件并使用Vtk显示
- 您需要对象吗,我帮你new一个吧?
- linux切割文件一半命令,Linux系统下切割文件的split命令用法
热门文章
- k8s 手动恢复redis 集群_二进制手动部署k8s-1.14高可用集群(二、集群部署)
- 有一个会泰勒级数的八岁表妹是怎样一种体验?
- 在床上玩手机,千万不能把手机放下!
- 陪孩子看完这几部高分纪录片,胜过出国亲子游!
- 这个被称为20世纪最伟大人物的最强理科生,到底有多强,你根本不了解
- inputn函数与input函数的区别
- mysql 非空语法_mysql从入门到优化(1)基本操作上
- ftp服务器新建虚拟目录,ftp服务器 虚拟目录
- python中with as用法_python 中关于with...as的用法
- activity 防止多次打开_Android开发Activity任务和返回栈