CF900D Unusual Sequences

CF900D Unusual Sequences

题目简述

求有多少个不同的正整数序列

\[a_1,a_2,\dots,a_n \]

满足

\[\gcd(a_1,a_2,\dots a_n)=x \]

\[\sum_{i=1}^na_i=y \]

其中 \(x\)\(y\) 为给出的常量.

答案对 \(10^9+7\) 取模.

推导过程

显然,对于每个合法的 \(a\),一定存在一个与之一一对应的 \(b\) 满足 \(b_i=\frac{a_i}{x}\),且 \(\gcd(b_1,b_2,\dots,b_n)=1\)\(\sum_{i=1}^nb_i=\frac{y}{x}\).

显然当 \(x\nmid y\) 时答案为 \(0\),那么不妨设 \(m=\frac{y}{x}\).

\(f(m)\) 表示满足 \(\gcd\)\(1\),和为 \(m\) 的方案数.

正难则反,我们令 \(g(m)\) 表示和为 \(m\)\(\gcd\) 不限的方案数,那么由隔板法可得

\[g(m)=\sum_{n=1}^m\binom{m-1}{n-1}=2^{m-1} \]

于是 \(f(m)\) 就是 \(g(m)\) 减去和为 \(m\)\(\gcd\) 不为 \(1\) 的方案数.

显然和为 \(m\)\(\gcd\)\(k\) 的方案数是 \(f\!\left(\frac{m}{k}\right)\).

于是

\[\begin{align*} f(m)&=g(m)-\sum_{d|m,\,d>1}f\!\left(\frac{m}{d}\right) \\ &=g(m)-\sum_{d|m,\,d<m}f(d) \end{align*} \]

递归求解即可. 因为 \(m\) 的因子的因子还是 \(m\) 的因子,因此记忆化搜索即可只计算 \(m\) 的因子处 \(f\) 的值.

时间复杂度:

\[O\!\left(\sum_{d|m}\tau(d)\right) \]

可以粗略估计为

\[O\!\left(\tau(m)^2\right) \]

其中 \(m=\frac{y}{x}\).

posted on 2026-07-15 13:25  吴一鸣  阅读(1)  评论(0)    收藏  举报

导航