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$的时候,这个时候可以杜教筛求解。
然后这题就完了