莫比乌斯函数筛法 & 莫比乌斯反演
模板:
int p[MAXN],pcnt=0,mu[MAXN]; bool notp[MAXN]; void shai(int n){ mu[1]=1; for(int i=2;i<=n;++i){ if (notp[i]==0){ p[++pcnt]=i; mu[i]=-1; } for (int j=1,t=p[j]*i;j<=pcnt&&t<=n;++j,t=p[j]*i){ notp[t]=1; if (i%p[j]==0){ mu[i]=0; break; }else mu[i*p[j]]=-mu[i]; } } }
$\mu(d)$函数的定义如下:
(1)若,那么
(2)若,均为互异素数,那么
(3)其它情况下
对任意正整数n有
(很重要!!!)
(有用吗 (╯°Д°)╯︵ ┻━┻,还是记一记吧)
对于莫比乌斯反演:
$$F(n) = \sum_{d|n} f(d)$$
结论:
$$f(n) = \sum_{d|n} \mu(d) F(\frac{n}{d})$$
证明(真心简洁):
$$\sum_{d|n} \mu(d) F(\frac{n}{d}) = \sum_{d|n} \mu(d) \sum_{d'|{\frac{n}{d}}} f(d') = \sum_{d'|n} f(d') \sum_{d|{\frac{n}{d'}}} \mu(d) = f(n)$$
NOI 2017 Bless All