【随笔】计算等比数列求和

真的是随笔。。

等比数列求和大家都知道,就是求 i=0nqi。一般来说我们都会对 p 取模。

下面我们来讨论如何快速地求这个值。暴力 O(n) 做就算了吧。

经典方法

小学生都知道,i=0nqi=qn+11q1。证明也是小学生都会的错位相消。

那么我们求一下快速幂,求出 q1modp 意义下的逆元,乘起来就行了。

遗憾的是,某些出题人并没有这么良心。如果 p 不是质数,q1modp 意义下的逆元就不存在了>_<

因此,这个方法的要求就是:p 为质数。当然如果题目告诉你 gcd(q1,p)=1 也可以,不过一般没人这么干。

不知道算什么的算法

2n

i=0nqi=i=0n/2qi+i=n/2nqiqn/2=i=0n/2qi(1+qn/2)qn/2

2n

i=0nqi=i=0(n1)/2qi+i=(n+1)/2nqi=i=0(n1)/2qi(1+q(n+1)/2)

因此,不管怎样,问题的规模都会被我们缩减一半。

结合快速幂,在计算的同时算出 qn/2 或者 q(n+1)/2 的值,即可做到 O(logn)

矩阵快速幂加速递推

不难写出整式递推:记 Sn=i=0nqi,则有 Sn=qSn1+1,S0=1。写成矩阵:

[Sn+11]=[Sn1]×[q101]

矩阵快速幂即可。O(logn)

posted @   云浅知处  阅读(160)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示