记录一下,下文的除法非特殊注明都是向下取整。
求 F(n,k)=∑ki=0(ni)(modp)。
首先使用卢卡斯定理。
k∑i=0(ni)=k∑i=0(npip)(nmodpimodp)=p−1∑j=0(nmodpj)k∑i=0[imodp=j](npip)=p−1∑j=0(nmodpj)k−jp∑i=0(npi)=p−1∑j=0(nmodpj)F(np,k−jp)
然后考虑 k−jp 的取值,只有 kp 和 kp−1 两种,在 j∈[0,kmodp] 的时候取到 kp,否则取到 kp−1。
那么只需要计算两个即可,前面的预处理较小范围的组合数前缀和可以直接算。
时间复杂度 O(2logpn)。
注意到 F(n,k)=F(n,k−1)+(nk),这一步使用卢卡斯定理在 O(logn) 的时间内求出可以做到 O(log2n)。
例题有 P4345 [SHOI2015]超能粒子炮·改和[ABC251Ex] Fill Triangle。
莫队计算方法:
我们只需要能计算 F(n,k) 到 F(n,k+1) 和 F(n+1,k) 即可。
第一个是简单的,加一个组合数即可。
第二个考虑看杨辉三角上,发现 F(n,k)+F(n,k)−(nk)=F(n+1,k)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】