题目链接hdu1695
题目大意:有Q个询问,对每个询问,给出N,M,k,求 1 <= x <= N,1 <= y <= M 中满足 gcd(x, y) = k 的无序对(x, y)的对数。
若先不考虑无序,根据我们前面的经验,构造f(d), F(d):
f(d) = | {(x, y) | gcd(x, y) == d, x <= N, y <= M} |
F(d) = | {(x, y) | (d | gcd(x, y)), x <= N, y <= M} |
则可知F(d) = N / d × M / d。通过mobius反演可得到:
则我们要求的是f(k)。事实上,若gcd(x, y) = k,则 gcd(x / k, y / k) = 1。将N、M分别替换为N / k、 M / k,问题就转化为我们熟悉的求f(1)的问题了。即:
此外,我们观察函数g(i) = N / i,它的函数值是一个分段函数,且每一段均为常数。因此我们如果预处理出μ函数的前缀和,则对每一段都可O(1)的求出结果。总的复杂度为O(sqrt(n))
这样求出来的是有序对(x, y)的数量,还需要去重。
|
|