【训练题36:数学】斐波那契各项幂次前缀和

  • 正题
  • 解法
    • 问题一 :根号五?
    • 问题二 :公比模意义为一?
  • 核心代码

正题

  • 【链接】
    斐波那契各项幂次前缀和
  • 【题意】给定 n,Kn,Kn,K,求出:
    ∑i=1n(Fibi)K(mod1e9+9)\sum_{i=1}^n (Fib_i)^{K}\pmod {1e9+9} i=1∑n​(Fibi​)K(mod1e9+9)
    其中 FibiFib_iFibi​ 表示第 iii 个斐波那契数字, Fib[]=[1,1,2,3,5,8,⋯]Fib[]=[1,1,2,3,5,8,\cdots]Fib[]=[1,1,2,3,5,8,⋯]
  • 【范围】
    1≤n≤10181\le n\le 10^{18}1≤n≤1018
    1≤K≤1051\le K\le 10^51≤K≤105

解法

  • 由于 KKK 比较大,我们不能直接用矩阵快速幂去做。考虑斐波那契数字的显式公式
    具体内容见我的博客:【小组专题三:斐波那契专题】
    fn=15(αn−βn)f_n=\frac{1}{\sqrt 5}(\alpha^n-\beta^n) fn​=5​1​(αn−βn)
    其中 α=5+12,β=5−12\alpha=\frac{\sqrt5+1}{2},\beta=\frac{\sqrt5-1}{2}α=25​+1​,β=25​−1​
    于是,我们要求的内容就变成了:(以下式子皆省略模数)
    ∑i=1n(Fibi)K=∑i=1n15K(αi−βi)K=15K∑i=1n(αi−βi)K\sum_{i=1}^n (Fib_i)^{K}=\sum_{i=1}^n \frac{1}{\sqrt5^K}(\alpha^i-\beta^i)^K= \frac{1}{\sqrt5^K}\sum_{i=1}^n(\alpha^i-\beta^i)^K i=1∑n​(Fibi​)K=i=1∑n​5​K1​(αi−βi)K=5​K1​i=1∑n​(αi−βi)K
    设 15K=Re\frac{1}{\sqrt5^K}=Re5​K1​=Re
    我们只要求后面的一个二项式即可。我们把二项式拆开来,得到:
    Fibn=Re((−1)0CK0αKnβ0n+(−1)1CK1α(K−1)nβ1⋅n+⋯)Fib_n=Re\Big( (-1)^0C_K^0 \alpha^{Kn}\beta^{0n} + (-1)^1C_K^1 \alpha^{(K-1)n}\beta^{1\cdot n} +\cdots\Big) Fibn​=Re((−1)0CK0​αKnβ0n+(−1)1CK1​α(K−1)nβ1⋅n+⋯)
    考虑到第 iii 项,即系数为 (−1)iCKiα(K−i)nβi⋅n(-1)^iC_K^i\alpha^{(K-i)n}\beta^{i\cdot n}(−1)iCKi​α(K−i)nβi⋅n。
    考虑到每一个 nnn,该项成等比数列,即:公比为 α(K−i)βi\alpha^{(K-i)}\beta^iα(K−i)βi,用等比公式求出即可。

问题一 :根号五?

  • 【Q】考虑到需要多次计算出 5\sqrt55​ 的值,在取模意义下怎么得到?
  • 【A】就是二次剩余的知识,见我的博客 【算法讲18:二次剩余】
    用 cipollacipollacipolla 即可预处理算出该模意义下的 5\sqrt55​ 的值。

问题二 :公比模意义为一?

  • 【Q】根据等比求和,公比必须不为 111。但是 α(K−i)βi\alpha^{(K-i)}\beta^iα(K−i)βi 在取模意义下可能为 111 咋办?
  • 【A】如果公比为 111,那么每一项取模意义下值都是第一项。贡献为 Re×(−1)i×nRe\times (-1)^i\times nRe×(−1)i×n

核心代码

  • 时间复杂度:O(Klog⁡K)O(K\log K)O(KlogK)
/*_            __   __          _          _
| |           \ \ / /         | |        (_)
| |__  _   _   \ V /__ _ _ __ | |     ___ _
| '_ \| | | |   \ // _` | '_ \| |    / _ \ |
| |_) | |_| |   | | (_| | | | | |___|  __/ |
|_.__/ \__, |   \_/\__,_|_| |_\_____/\___|_|__/ ||___/
*/
const ll sq5 = 383008016;
const ll iv2 = inv(2);
ll fac[MAX],ivfac[MAX];
ll C(int n,int m){if(m < 0 || m > n)return 0;return fac[n] * ivfac[m] % MOD * ivfac[n - m] % MOD;
}
void init(int n){fac[0] = 1;for(int i = 1;i <= n;++i){fac[i] = fac[i-1] * i % MOD;}ivfac[n] = inv(fac[n]);for(int i = n - 1;i >= 0;--i){ivfac[i] = ivfac[i+1] * (i + 1) % MOD;}
}
int main()
{init((int)1e5);int T;scanf("%d",&T);while(T--){ll n,k;scanf("%lld%lld",&n,&k);ll xi = inv(qpow(sq5,k));ll alpha = (1LL + sq5) * iv2 % MOD;ll beta  = (1LL - sq5 + MOD) * iv2 % MOD;ll res = 0;for(int i = 0;i <= k;++i){ll tmp = C(k,i);if(i & 1)tmp = (-tmp + MOD) % MOD;ll shu = qpow(alpha,k-i) * qpow(beta,i) % MOD;ll shu2= qpow(shu,n);if(shu == 1){     /// 公比为 1res = (res + n % MOD * tmp % MOD) % MOD;continue;}                   /// 等比数列求和公式tmp = tmp * shu % MOD * (shu2 - 1) % MOD * inv(shu - 1) % MOD;res = (res + tmp) % MOD;}res = res * xi % MOD;res = (res + MOD) % MOD;printf("%lld\n",res);}return 0;
}

【训练题36:数学】斐波那契各项幂次前缀和 | ZOJ 3774相关推荐

  1. 【快乐水题】509. 斐波那契数

    原题: 力扣链接:509. 斐波那契数 题目简述: 斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 .该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和.也就是: F( ...

  2. HDU 1568 Fibonacci【求斐波那契数的前4位/递推式】

    Fibonacci Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Proble ...

  3. 求解斐波那契数列复杂度分析

    前言:斐波那契作为一个算法基础知识,大家一定要掌握,祝大家学得开心~ 什么是斐波那契数列(Fibonacci sequence)? 斐波那契数列(Fibonacci sequence),又称黄金分割数 ...

  4. python斐波那契数列前20项_Python初学者笔记:打印出斐波那契数列的前10项

    问题:斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.- ...

  5. c语言---c语言中的斐波那契数列程序

    首先就要先了解何为斐波那契数列---斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故 ...

  6. 【小组专题三:斐波那契专题】斐波那契 与其20个性质 | 泽肯朵夫表示 | 卢卡斯数 与其8个性质 | 常系数二次线性齐次序列 | 模板与例题

    斐波那契专题 斐波那契序列的定义 斐波那契序列的基本性质 卢卡斯数 卢卡斯数的基本性质 正整数的泽肯朵夫(Zeckendorf)表示 其他斐波那契的性质 常系数的二次线性齐次递归关系 斐波那契进制/斐 ...

  7. 剑指offer——10.斐波那契数列

    题目: 题1:现在要求输入一个整数n,请你输出斐波那契数列的第n项. 题2:一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 题3:一只青蛙一次可以跳上1级台 ...

  8. 斐波那契数列的第n项(矩阵快速幂)

    矩阵快速幂是用来求解递推式的,所以第一步先要列出递推式:  f(n)=f(n-1)+f(n-2) 第二步是建立矩阵递推式,找到转移矩阵: ,简写成T * A(n-1)=A(n),T矩阵就是那个2*2的 ...

  9. 笔试题:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。该题有三种解法:递归的方法求解斐波那契数列、用概率与统计的数学方法解决,3.动态规划

    笔试题 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法.该题有三种解法:1.递归的方法求解斐波那契数列.2.用概率与统计的数学方法解决,3.动态规划 ...

  10. 青蛙跳台阶:我如何得知它是一道斐波那契数列题?——应用题破题“三板斧”

    本文以C语言实现. 目录 前言 一.斐波那契阿数列基础知识 二.引例:青蛙跳台阶 三.破题分析:举例归纳 1. 三板斧的使用 举例 模拟(必要时画图) 找规律 2. 代码展示 四.拓展用例:矩形覆盖问 ...

最新文章

  1. 修改centos7的网卡名
  2. 中通知设置响铃_iOS 13.1.3 正式版:解决来电不响铃问题
  3. 为什么在C中需要使用volatile?
  4. layui option 动态添加_layui中select的change事件、动态追加option
  5. @ControllerAdvice实现优雅地处理异常
  6. 【Elasticsearch】针对初学者的Elasticsearch搜索故障排除
  7. python 开发工具_一个极具意义的 Python 前端开发工具
  8. 详解:知乎如何使用机器学习,未来还有哪些想象空间
  9. Xshell 发送文本到当前Xshell窗口的全部会话
  10. 运行spark及hadoop版本不一致解决方法
  11. 【计算机组成原理】实验2:十六位数据总线实验
  12. 25个深度学习相关公开数据集
  13. python英文参考文献格式_英文参考文献的正确引用格式详解
  14. java uint64_Java 中的 uint64
  15. 实现添加数据、地图放大、缩小、漫游、全景视图、鹰眼图的操作(ICommand、ITool)...
  16. 数据库查询的降序排列
  17. 简单js模仿浏览器crtl+f功能
  18. r3 2200g参数 r3 2200g功耗 酷睿r32200g核显相当于什么显卡
  19. 树莓派3卡片电脑,指尖上的智慧
  20. hadoop编程实战——日志分析

热门文章

  1. VMware ESXI虚拟机修改MAC地址的方法
  2. 朱晔的互联网架构实践心得S2E1:业务代码究竟难不难写?
  3. unity 暂停按钮_Unity通过按钮控制视频播放与停止
  4. 总结一下关于扫描电子显微镜与背散射电子探测器
  5. 点桌面计算机一直在加载,Win7系统在桌面点右键一直转圈的解决方法
  6. python爬虫网页崩溃怎么处理_《Python网络爬虫》1.2 爬取网页的异常处理
  7. 可见首发《模式识别与智能计算:MATLAB技术实现(第2版)》 百度网盘 下载 分享
  8. BGP——MPLS-V P Ǹ综合实验
  9. 2个步骤,让人才成为组织进化的发动机
  10. android netcfg命令,Android netcfg