CF2037G Natlan Exploring

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\),该时间复杂度可以接受.

posted on 2026-07-14 22:19  吴一鸣  阅读(0)  评论(0)    收藏  举报

导航