Noi2016 循环之美

题意相当于求如下式子 $$ \sum _{i=1}^{n} \sum_{j=1}^{m} [gcd(i,j)=1][gcd(j,k)=1] \\ k <= 1000 ; n,m <= 10^9 $$ 化简一下: $$ \begin{aligned} & \sum_d \mu(d) * \sum _{j=1}^{\lfloor \frac{m}{d}\rfloor} [gcd(d*j,k)=1] \\ & = \sum_d \mu(d)[gcd(d,k)=1] * \sum _{j=1}^{\lfloor \frac{m}{d}\rfloor} [gcd(j,k)=1] \end{aligned} $$ 发现我们需要求两个前缀和 $$ f(i) = \sum_{i=1}^{n} \mu(i)[gcd(i,k)=1] $$ $$ g(i) = \sum_{i=1}^{n}[gcd(i,k)=1] $$ 求g枚举k的约数就行了 具体如下 $$ \begin{aligned} g(i) & = \sum_{i=1}^{n}[gcd(i,k)=1] \\ & = \sum _{d|k} \mu(d) {\lfloor \frac{n}{d}\rfloor} \end{aligned} $$ 现在考虑如何求f,多加一个元 $$ \begin{aligned} S(i,k) & = \sum_{i=1}^{n} \mu(i)[gcd(i,k)=1] \\ & =\sum _{d|k} \mu(d) * \sum _{j=1}^{{\lfloor \frac{n}{d}\rfloor}} \mu (d*j) \\ & =\sum _{d|k} \mu(d) * \sum _{j=1}^{{\lfloor \frac{n}{d}\rfloor}} \mu (d) * \mu(j) [gcd(d,j)=1] \\ & =\sum _{d|k} \mu(d)^2 * \sum _{j=1}^{{\lfloor \frac{n}{d}\rfloor}}\mu(j) [gcd(d,j)=1] \\ & =\sum _{d|k} \mu(d)^2 * S({{\lfloor \frac{n}{d}\rfloor}},d) \end{aligned} $$ 边界是$k=1$的时候,这个时候可以杜教筛求解。 然后这题就完了
posted @ 2019-06-05 22:01  jerome_wei  阅读(184)  评论(0编辑  收藏  举报