真的是随笔。。
等比数列求和大家都知道,就是求 ∑ni=0qi。一般来说我们都会对 p 取模。
下面我们来讨论如何快速地求这个值。暴力 O(n) 做就算了吧。
经典方法
小学生都知道,∑ni=0qi=qn+1−1q−1。证明也是小学生都会的错位相消。
那么我们求一下快速幂,求出 q−1 在 modp 意义下的逆元,乘起来就行了。
遗憾的是,某些出题人并没有这么良心。如果 p 不是质数,q−1 在 modp 意义下的逆元就不存在了>_<
因此,这个方法的要求就是:p 为质数。当然如果题目告诉你 gcd(q−1,p)=1 也可以,不过一般没人这么干。
不知道算什么的算法
若 2∣n:
n∑i=0qi=n/2∑i=0qi+n∑i=n/2qi−qn/2=n/2∑i=0qi⋅(1+qn/2)−qn/2
若 2∤n:
n∑i=0qi=(n−1)/2∑i=0qi+n∑i=(n+1)/2qi=(n−1)/2∑i=0qi⋅(1+q(n+1)/2)
因此,不管怎样,问题的规模都会被我们缩减一半。
结合快速幂,在计算的同时算出 qn/2 或者 q(n+1)/2 的值,即可做到 O(logn)。
矩阵快速幂加速递推
不难写出整式递推:记 Sn=∑ni=0qi,则有 Sn=qSn−1+1,S0=1。写成矩阵:
[Sn+11]=[Sn1]×[q101]
矩阵快速幂即可。O(logn)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效