组合数前缀和计算

记录一下,下文的除法非特殊注明都是向下取整。

F(n,k)=i=0k(ni)(modp)

首先使用卢卡斯定理。

i=0k(ni)=i=0k(npip)(nmodpimodp)=j=0p1(nmodpj)i=0k[imodp=j](npip)=j=0p1(nmodpj)i=0kjp(npi)=j=0p1(nmodpj)F(np,kjp)

然后考虑 kjp 的取值,只有 kpkp1 两种,在 j[0,kmodp] 的时候取到 kp,否则取到 kp1

那么只需要计算两个即可,前面的预处理较小范围的组合数前缀和可以直接算。

时间复杂度 O(2logpn)

注意到 F(n,k)=F(n,k1)+(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)

作者:紊莫

出处:https://www.cnblogs.com/wenmoor/p/18236009

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   紊莫  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题