模板 - 数学 - 数论 - 莫比乌斯反演 - 2

注:实际上和式的上界都是 $gcd$ 的上界,在答案中,记 $N=min(n,m)$ 以明确复杂度。


示例:

1.经典问题 求 $f(x,n,m)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)==x]$ :

答案: $f(x,n,m) = \sum\limits_{k=1}^{\lfloor\frac{N}{x}\rfloor}\mu(k){\lfloor{\frac{n}{kx}}}\rfloor{\lfloor{\frac{m}{kx}}\rfloor}$

构造: $F(x,n,m) = \sum\limits_{x|d}f(d) = \sum\limits_{k=1}f(kx) =\sum\limits_{k=1}\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)==kx] = {\lfloor{\frac{n}{x}}}\rfloor{\lfloor{\frac{m}{x}}\rfloor}$ (只要 $i,j$ 都是 $x$ 的倍数, $gcd(i,j)$ 一定是某个 $x$ 的 $k$ 倍)

反演: $f(x,n,m) = \sum\limits_{x|d}\mu(\frac{d}{x})F(d) = \sum\limits_{k=1}\mu(k)F(kx) = \sum\limits_{k=1}\mu(k){\lfloor{\frac{n}{kx}}}\rfloor{\lfloor{\frac{m}{kx}}\rfloor}$

当 $kx>min(n,m)$ 的时候 $f(kx)=0$

当 $x=1$ 时,代入公式得 $f(1,n,m) = \sum\limits_{k=1}\mu(k){\lfloor{\frac{n}{k}}}\rfloor{\lfloor{\frac{m}{k}}\rfloor}$ ,所以 $f(x,n,m)=f(1,\lfloor\frac{n}{x}\rfloor,\lfloor\frac{m}{x}\rfloor)$

2.经典问题求 $f_2(n,m) = \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}gcd(i,j)$ :

答案:$f_2(n,m) = \sum\limits_{x=1}^{N}x \sum\limits_{k=1}^{\lfloor\frac{N}{x}\rfloor}\mu(k){\lfloor{\frac{n}{kx}}}\rfloor{\lfloor{\frac{m}{kx}}\rfloor}$

这一次我们要求所有的 gcd 的和,显然所求为 $f_2(n,m) = \sum\limits_{x=1}xf(x,n,m)$ 。也就是所有的 gcd 的个数乘上这个gcd本身的值。

 $f_2(n,m) = \sum\limits_{x=1}xf(x,n,m) = \sum\limits_{x=1}xf(1,\lfloor\frac{n}{x}\rfloor,\lfloor\frac{m}{x}\rfloor) = \sum\limits_{x=1}x \sum\limits_{k=1}\mu(k){\lfloor{\frac{n}{kx}}}\rfloor{\lfloor{\frac{m}{kx}}\rfloor}$

3.经典问题 求 $f_3(n,m,k)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}gcd(i,j)^k$ 

答案:$f_3(n,m,k)= \sum\limits_{x=1}^{N}x^k \sum\limits_{k=1}^{\lfloor\frac{N}{x}\rfloor}\mu(k){\lfloor{\frac{n}{kx}}}\rfloor{\lfloor{\frac{m}{kx}}\rfloor}$

这一次我们要求所有的 gcd 的k次方,显然所求为 $f_3(n,m,k)=\sum\limits_{x=1}x^kf(x,n,m)$ 。也就是所有的 gcd 的个数乘上这个 gcd 的 k 次方值。

 $f_3(n,m,k) = \sum\limits_{x=1}x^k f(x,n,m) = \sum\limits_{x=1}x^k f(1,\lfloor\frac{n}{x}\rfloor,\lfloor\frac{m}{x}\rfloor) = \sum\limits_{x=1}x^k \sum\limits_{k=1}\mu(k){\lfloor{\frac{n}{kx}}}\rfloor{\lfloor{\frac{m}{kx}}\rfloor}$

4.求给定的 n 个数中有多少个四元组 (a,b,c,d) 的 gcd==1 :

f(t) = 求给定的 n 个数中有多少个四元组 (a,b,c,d) 的 gcd==t ,

F(t) = 求给定的 n 个数中有多少个四元组 (a,b,c,d) 的 gcd==kt 。

那么我们要求 f(1) ,应用倍数公式后,只要快速求解每一个 F(t) 就足够了。由于 k 是任意的,所以 gcd 被我们去掉了,我们只需要求 t 的倍数有m个,然后 $C_m^4$ 就是 F(t)。


参考资料:

https://blog.csdn.net/jk_chen_acmer/article/details/82712276

猜你喜欢

转载自www.cnblogs.com/Yinku/p/10494980.html
今日推荐