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}\).
浙公网安备 33010602011771号