BZOJ 4591 【SHOI2015】 超能粒子炮·改
题目链接:超能粒子炮·改
这道题的大体思路就是用\(lucas\)定理,然后合并同类项,就可以得到一个可以递归算的式子了。
我们用\(S(n,k)\)表示答案,\(p\)表示模数(\(2333\)是一个质数),那么有:
\begin{aligned}
S(n,k)&=\sum_{i=0}^k\binom{n}{i} \\
&=\sum_{i=0}^k\binom{n\bmod p}{i \bmod p}\binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{i}{p} \rfloor}
\end{aligned}
为了接下来方便表示,不妨设\(k=k_1p+k_2(k_2<p)\)
我们按\(\lfloor \frac{i}{p} \rfloor\)的值进行分类计算。由于前面有\(k_1\)块是满的,最后一块不满,所以分两部分计算。
\begin{aligned}
S(n,k) &=\sum_{i=0}^k\binom{n\bmod p}{i \bmod p}\binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{i}{p} \rfloor} \\
&=\sum_{i=0}^{k_1-1}\binom{\lfloor \frac{n}{p} \rfloor}{i}\sum_{j=0}^{p-1}\binom{n \bmod p}{j}+\sum_{i=k_1p}^k\binom{n \bmod p}{i \bmod p}\binom{\lfloor \frac{n}{p} \rfloor}{\lfloor \frac{i}{p} \rfloor} \\
&=S(\lfloor \frac{n}{p} \rfloor,k_1-1)S(n \bmod p,p-1)+\binom{\lfloor \frac{n}{p} \rfloor}{k_1}S(n \bmod p,k \bmod p)
\end{aligned}
所以预处理\(p\)以内的组合数以及组合数的前缀和就可以递归算了。组合数用\(lucas\)算一算就好。