最后是看https://blog.csdn.net/litble/article/details/72804050才懂示例1的,结果示例2推不出来,说明我是乱搞的?
什么乱起八糟的。https://blog.csdn.net/litble/article/details/79509373根据我们做莫比乌斯反演题的经验,枚举gcd的值?
https://blog.csdn.net/ControlBear/article/details/77839443
数论分块?杜教筛?
https://www.cnblogs.com/phile/p/4474087.html
https://www.cnblogs.com/pdev/category/682194.html
狄利克雷卷积
https://blog.csdn.net/a574780196/article/details/82932986
莫比乌斯函数的性质:
当x有偶数个不同的质因子,mux=1,奇数个不同的,mu=-1,存在质因子的平方,0。
$sumlimits_{d|n}{frac{mu(d)}{d}}=frac{varphi(n)}{n}$
莫比乌斯函数线性筛:
void mobius() { int i,j; mbs[1] = 1; fo(i,2,N) { if (!vis[i]) { p[++p[0]] = i; mbs[i] = -1; } for (j = 1; j <= p[0] && i * p[j] <= N; j++) { vis[i*p[j]] = 1; if (i % p[j] == 0) { mbs[i*p[j]] = 0; break; } mbs[i*p[j]] = - mbs[i]; } } }
void get_mu(int n) { mu[1]=1; for(int i=2;i<=n;i++) { if(!vis[i]){prim[++cnt]=i;mu[i]=-1;} for(int j=1;j<=cnt&&prim[j]*i<=n;j++) { vis[prim[j]*i]=1; if(i%prim[j]==0)break; else mu[i*prim[j]]=-mu[i]; } } }
莫比乌斯反演:
因数有关的:
$F(n) = sumlimits_{d|n}f(d)$
可以得
$f(d) = sumlimits_{d|n}mu(d)F(frac{n}{d})$
倍数有关的(常用):
$F(n) = sumlimits_{n|d}f(d)$
可以得
$f(n) = sumlimits_{n|d}mu(frac{d}{n})F(d)$
示例:
1.经典问题 求 $f(x)=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i,j)==x]$ :
反演对: $F(x) = sumlimits_{x|d}f(d) = sumlimits_{k=1}f(kx) =sumlimits_{k=1}sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i,j)==kx] = {lfloor{frac{n}{x}}} floor{lfloor{frac{m}{x}} floor}$ (只要 $i,j$ 都是 $x$ 的倍数, $gcd(i,j)$ 一定是某个 $x$ 的 $k$ 倍)
答案: $f(x) = sumlimits_{x|d}mu(frac{d}{x})F(d) = sumlimits_{k=1}mu(k)F(kx) = sumlimits_{k=1}mu(k){lfloor{frac{n}{kx}}} floor{lfloor{frac{m}{kx}} floor}$
当 $kx>min(n,m)$ 的时候 $f(kx)=0$ (gcd的上界)。
2.求 $f = sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}gcd(i,j)$ :
答案:$sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}gcd(i,j) = sumlimits_{x=1}^{lfloor{frac{n}{d}} floor}mu(x){lfloor{frac{n}{dx}}} floor{lfloor{frac{m}{dx}} floor}$
第1题算出 $f_2(x)=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i,j)==x]$ ,这一次我们要求所有的 gcd 的和,显然所求为 $f = sumlimits_{x=1}xf_2(x)$ 。也就是所有的 gcd 的个数乘上这个gcd本身的值。
3.求 $f=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}gcd(i,j)^k$
答案:$sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}gcd(i,j)^k = sumlimits_{d=1}^{n}d^ksumlimits_{x=1}^{lfloor{frac{n}{d}} floor}mu(x){lfloor{frac{n}{dx}}} floor{lfloor{frac{m}{dx}} floor}$
第1题算出 $f_2(x)=sumlimits_{i=1}^{n}sumlimits_{j=1}^{m}[gcd(i,j)==x]$ ,这一次我们要求所有的 gcd 的k次方,显然所求为 $f=sumlimits_{x=1}^{N}x^kf_2(x)$ 。也就是所有的 gcd 的个数乘上这个 gcd 的 k 次方值。
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)。