Loading

组合数前缀和

上指标:\(\sum\limits_{i=m}^n \dbinom{i}{m}=\dbinom{n+1}{m+1}\)

下指标:\(\sum\limits_{i=0}^m \dbinom{n}{i}\)
\(f(n, m) = \sum\limits_{i=0}^m \dbinom{n}{i}\)
目前没有公式,可以考虑以下做法:

莫队

\(f(n, m) = \sum\limits_{i=0}^m \dbinom{n}{i}\)
\(m\) 的变化可以通过 \(\pm\) 一个组合数求出,\(n\) 的变化考虑 \(\dbinom{n}{m}=\dbinom{n-1}{m}+\dbinom{n-1}{m-1}\)
时间复杂度 \(\mathcal{O}(n\sqrt q)\)

djq 分治

不会 poly,鸽。

Lucas 定理

下面的 \(/\) 默认是向下取整的。

\[\sum\limits_{i=0}^m \dbinom{n}{i} \]

\[=\sum\limits_{i=0}^m \dbinom{n/p}{i/p}\dbinom{n \bmod p}{i \bmod p}$$$$=\sum\limits_{j=0}^{p-1}\dbinom{n \bmod p}{j} \sum\limits_{i=0}^m [i \bmod p = j]\dbinom{n/p}{i/p} \]

\[=\sum\limits_{j=0}^{p-1}\dbinom{n \bmod p}{j} \sum\limits_{i=0}^{(m-j)/p} \dbinom{n/p}{i} \]

\[=\sum\limits_{j=0}^{p-1}\dbinom{n \bmod p}{j}f(n/p, (k-j)/p) \]

对于 \((k - j) / p\) 显然只有两种取值:\(k/p\)\(k/p - 1\)。当 \(j \in [0, k\bmod p]\) 时是 \(k/p\),否则是 \(k/p-1\),那么前面就是

\[=\sum\limits_{j=0}^{p-1}\dbinom{n \bmod p}{j}f(n/p, k/p-1)+\dbinom{n/p}{k/p}\sum\limits_{j=0}^{k \bmod p}\dbinom{n \bmod p}{j} \]

\[=f(n\bmod p, p - 1)f(n/p, k/p - 1) + \dbinom{n/p}{k/p}f(n\bmod p, k\bmod p) \]

\(f(n/p, k/p - 1)\) 递归计算,\(\dbinom{n/p}{k/p}\) 用 Lucas 定理预处理即可。时间复杂度 \(\mathcal{O}(p^2) \sim \mathcal{O}(\log_p^2 n)\)

posted @ 2026-01-29 19:33  循环一号  阅读(0)  评论(0)    收藏  举报