Noi2016 循环之美
题意相当于求如下式子
$$
sum _{i=1}^{n} sum_{j=1}^{m} [gcd(i,j)=1][gcd(j,k)=1] \
k <= 1000 ; n,m <= 10^9
$$
化简一下:
$$
egin{aligned}
& sum_d mu(d) * sum _{j=1}^{lfloor frac{m}{d}
floor} [gcd(d*j,k)=1]
\
& = sum_d mu(d)[gcd(d,k)=1] * sum _{j=1}^{lfloor frac{m}{d}
floor} [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的约数就行了
具体如下
$$
egin{aligned}
g(i) & = sum_{i=1}^{n}[gcd(i,k)=1]
\
& = sum _{d|k} mu(d) {lfloor frac{n}{d}
floor}
end{aligned}
$$
现在考虑如何求f,多加一个元
$$
egin{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}
floor}} mu (d*j)
\
& =sum _{d|k} mu(d) * sum _{j=1}^{{lfloor frac{n}{d}
floor}} mu (d) * mu(j) [gcd(d,j)=1]
\
& =sum _{d|k} mu(d)^2 * sum _{j=1}^{{lfloor frac{n}{d}
floor}}mu(j) [gcd(d,j)=1]
\
& =sum _{d|k} mu(d)^2 * S({{lfloor frac{n}{d}
floor}},d)
end{aligned}
$$
边界是$k=1$的时候,这个时候可以杜教筛求解。
然后这题就完了