题目相关
题目链接:洛谷 P2522 [HAOI2011]Problem b
题目描述:
对于给出的 $n$ 个询问,每次求有多少个数对 $(x,y)$ ,满足 $a≤x≤b$ , $c≤y≤d$ ,且 $gcd(x,y)=k$ ,$gcd(x,y)$ 函数为x和y的最大公约数。
输入输出格式:
输入格式:
第一行一个整数 $n$ ,接下来 $n$ 行每行五个整数,分别表示 $a、b、c、d、k$ 。
输出格式:
共 $n$ 行,每行一个整数表示满足要求的数对 $(x,y)$ 的个数。
输入输出样例:
输入#1 | 输出#1 |
---|---|
2 2 5 1 5 1 1 5 1 5 2 |
14 3 |
说明:
100%的数据满足:$1≤n≤50000$ , $1≤a≤b≤50000$ , $1≤c≤d≤50000$ , $1≤k≤50000$ 。
博主乱搞
蒟蒻解析:
看到 $gcd$ 果断想一想是不是和某个神奇的反演搞上了?(本来做做这道题就是来复习一下的。。。)
我们知道莫比乌斯反演有两个式子:(蒟蒻博主默默标记一下小|大)
$$F(n)=\sum\limits_{d|n}^{}{f(d)}\Longrightarrow f(n)=\sum\limits_{d|n}^{}{\mu(d)F{(\frac{n}{d}})}$$
$$F(n)=\sum\limits_{n|d}^{}{f(d)}\Longrightarrow f(n)=\sum\limits_{n|d}^{}{\mu (\frac{d}{n})F{(d)}}$$
第一个式子一般用于枚举因数,第二个用来枚举倍数。这里我们用第二种。
设 $f(k)$ 代表 $\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}{[gcd(i,j)==k]}$ 的个数, $F(k)$ 代表 $\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}{[gcd(i,j)==k及其倍数]}$ 。显然, $F(k)=\sum\limits_{n|d}^{}{f(d)}$ ,则 $f(k)=\sum\limits_{k|d}^{}{\mu (\frac{d}{k})F{(d)}}$ 。又因为 $F(k)=\lfloor \frac{n}{k} \rfloor \lfloor \frac{m}{k} \rfloor$ ,所以就能够求出 $f(k)$ 。为了方便,我们最后一班把 $gcd(i,j)==k$ 的形式转化为 $gcd(i,j)==1$ 的形式便于计算。
至于最终答案,我们可以利用二维前缀和知识进行相关转化。设方程中求和的 $m,n$ 给出,结果为 $calc(m,n)$ ,则最终答案为 $Ans=calc(b,d)-calc(a-1,d)-calc(b,c-1)+calc(a-1,c-1)$ 。
由于有多组询问我们就可以分块解决。
蒟蒻代码:
1 |
|