题解
首先我们利用容斥原理把1个询问拆成4个,即ans(b,d)-ans(b,c-1)-ans(a-1,d)+ans(a-1,c-1)
其中ans(x,y)表示1<=i<=x/k,1<=j<=y/k且gcd(x,y)=1的(x,y)的有序数对的数量
那么如何求出ans(x,y)呢?
我们可以令f(i)为1<=x<=n,1<=y<=m且gcd(x,y)=i的数对(x,y)的个数,F(i)为1<=x<=n,1<=y<=m且i|gcd(x,y)的数对(x,y)的个数
那么显然$F(i)=\sum_{i|d}^{ } f(d)$
且 $F(i)=\left [ \frac{n}{i} \right ]\left [ \frac{m}{i} \right ]$
所以我们使用莫比乌斯反演的倍数形式得到$f(i)=\sum_{i|d}^{ }\mu (\frac{d}{i})F(d)$
f(1)就是答案
那么我们枚举1~n即可计算答案,时间复杂度O(n^2)
还是无法通过此题,考虑进一步优化
我们发现 $\left [ \frac{n}{d} \right ]\left [ \frac{m}{d} \right ]$ 最多只有 $2(\sqrt{n}+\sqrt{m})$ 个取值
那么我们可以对每一个取值维护一段区间,对莫比乌斯函数维护一个前缀和sum[i],然后计算这个区间的值即可
时间复杂度O( $n\sqrt{n}$ )
参考代码
|
|