CF2037G Natlan Exploring
题目简述
\[f_1=1
\]
\[f_n=\sum_{i=1}^{n-1}\bigl[\gcd(a_i,a_n)\neq1\bigr]\cdot f_i
\]
已知 \(n\),\(a_i\),求 \(f_n\).
答案对 \(998244353\) 取模.
\(n\leq 2\times 10^5\),\(V=\max a_i=10^6\).
推导过程
\[\begin{align*}
f_n&=\sum_{i=1}^{n-1}\Bigl(1-\bigl[\gcd(a_i,a_n)=1\bigr]\Bigr)\cdot f_i \\
&=\left(\sum_{i=1}^{n-1}f_i\right)-\left(\sum_{i=1}^{n-1}\bigl[\gcd(a_i,a_n)=1\bigr]\cdot f_i\right) \\
&=\left(\sum_{i=1}^{n-1}f_i\right)-\left(\sum_{i=1}^{n-1}f_i\cdot\sum_{x|a_i,\,x|a_n}\mu(x)\right) \\
&=\left(\sum_{i=1}^{n-1}f_i\right)-\left(\sum_{x|a_n}\mu(x)\cdot \sum_{i<n,\,x|a_i}f_i\right)
\end{align*}
\]
维护 \(f\) 的前缀和以计算 \(\sum_{i=1}^{n-1}f_i\). 设
\[q_n=\sum_{i=1}^nf_i
\]
对于右半部分,维护一个 \([1,V]\) 的桶 \(B\),处理到 \(f_n\) 时,记
\[B_{n,x}=\sum_{i=1}^n\bigl[x\mid a_i\bigr]\cdot f_i
\]
那么
\[f_n=q_{n-1}-\sum_{x|a_n}\mu(x)\cdot B_{n-1,\,x}
\]
算出每个 \(f_n\) 时,将桶中 \(a_n\) 的所有因子处加上 \(f_n\).
需要用欧拉筛线性预处理出 \(\mu\).
该算法的时间复杂度为 \(O(n\cdot\max\tau(a_i)+V)\).
\(V=10^6\) 以内因子最多的数为 \(720720\),它有 \(240\) 个因子. 因此对于本题中 \(n=2\times 10^5\),该时间复杂度可以接受.
浙公网安备 33010602011771号