[NOI2016] 循环之美

NOI2016 循环之美

首先要求数值互不相同,就相当于要求分子分母互质(不互质就会重复)

考虑怎么转化纯循环小数这个条件:

\(\frac{x}{y}\) 循环节为 \(l\) 位,这意味着 \(\frac{x}{y}\) 向左平移 \(l\) 位后,小数点后的部分不变,即:

\[xk^l\equiv x\bmod y \]

\(x,y\) 互质,因此只要 \(k,y\) 互质即可。

于是只需要求

\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=1][\gcd(j,k)=1] \]

\[\begin{aligned} &=\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=1][\gcd(j,k)=1]\\ &=\sum_{j=1}^{m}[\gcd(j,k)=1]\sum_{i=1}^{n}\sum_{d|\gcd(i,j)}\mu(d)\\ &=\sum_{d=1}^{n}[\gcd(d,k)=1]\mu(d)\sum_{j=1}^{m/d}\sum_{i=1}^{n/d}[\gcd(j,k)=1]\\ &=\sum_{d=1}^{n}[\gcd(d,k)=1]\mu(d)\lfloor\dfrac{n}{d}\rfloor\sum_{j=1}^{m/d}[\gcd(j,k)=1] \end{aligned} \]

这里可以整除分块了,考虑分别计算:

\[f(x)=\sum_{i=1}^{x}[\gcd(i,k)=1]\\ g(x,k)=\sum_{i=1}^{x}[\gcd(i,k)=1]\mu(i) \]

注意到 \(k\) 非常小,因此 \(\gcd(i,k)=\gcd(i\bmod k,k)\),我们只需要对 \(1\sim k\) 中每个数 \(x\) 维护 \(g(x)\) 表示 $\le $ 该数的数中与 \(k\) 互质的数的个数。再维护一个 \(g(x)\) 的前缀和即可 \(\mathcal O(1)\) 求解单个 \(f\)

但是 \(g\) 不行,因为 \(\mu(i)\not=\mu(i+k)\),两者的关系很复杂。

\[\begin{aligned} g(x,k)&=\sum_{i=1}^{x}[\gcd(i,k)=1]\mu(i)\\ &=\sum_{i=1}^{x}\mu(i)\sum_{d|\gcd(i,k)}\mu(d)\\ &=\sum_{d|k}^{x}\mu(d)\sum_{i=1}^{x/d}\mu(id)\\ \end{aligned} \]

\(\gcd(i,d)\not=1\)\(\mu(id)=0\),对答案没有贡献,因此当 \(gcd(i,d)=1\),可以积性函数展开后面的 \(\mu\)

\[\begin{aligned} g(x,k)&=\sum_{d|k}^{x}\mu^2(d)\sum_{i=1}^{x/d}\mu(i)[\gcd(i,d)=1]\\ &=\sum_{d|k}^{x}\mu^2(d)g(\frac{x}{d},d)\\ \end{aligned} \]

于是可以递归求解所有的 \(g\),初始值 \(g(x,1)=\sum_{i=1}^{x}\mu(i)\) 杜教筛即可。

复杂度 \(\mathcal O(\sqrt{n}\sigma_0(k)+n^{\frac{2}{3}})\)

posted @ 2023-06-06 22:43  cjTQX  阅读(108)  评论(0编辑  收藏  举报