【BZOJ4591】 SHOI2015 超能粒子炮·改

本文介绍了如何使用Lucas定理解决BZOJ4591问题,即求Σkj=0C(n,j) Mod 2333 (n,k≤10^18)。通过递归分解问题,并预处理组合数,最终实现了高效的算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【BZOJ4591】 SHOI2015 超能粒子炮·改

题意:Σkj=0C(n,j) Mod 2333 (n,k1018)105组多测。

从来没有写过Lucas定理,全都忘光了……刚好趁这个机会记录一下。

Lucas定理:C(n,m)C(n/p,m/p)C(n%p,m%p) (mod p)

推导过程:p=2333,sum[i][j]=Σjk=0C(i,j)

ans(n,k)=Σkj=0C(n,j)

=C(n,0)+C(n,1)+C(n,2)+...+C(n,k)

=C(n/p,0/p)C(n%p,0%p)+C(n/p,1/p)C(n%p,1%p)+...+C(n/p,k/p)C(n%p,k%p)

=C(n/p,0)sum[n%p][p1]+C(n/p,1)sum[n%p][p1]+...+C(n/p,k/p1)sum[n%p][p1]+C(n/p,k/p)sum[n%p][k%p]

=sum[n%p][p1]Σk/p1j=0C(n/p,j)+C(n/p,k/p)sum[n%p][k%p]

=sum[n%p][p1]ans(n/p,k/p1)+C(n/p,k/p)sum[n%p][k%p]

预处理C(0,0)C(p1,p1)sum[0p1][0p1]ans(n/p,k/p1)递归求解,C(n/p,k/p)用Lucas定理递归求出。

时间复杂度……不太会算,不过显然小于O(log2pn)

以上。大家都会就我不会好虚啊。
还有7天JSOI……加油吧。

logpn+logpnp+logpnp2+...有谁会算的话劳请教一下本蒟蒻……谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值