莫比乌斯函数筛法 & 莫比乌斯反演

模板:

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)$$

你可能感兴趣的:(莫比乌斯函数筛法 & 莫比乌斯反演)