莫比乌斯函数与莫比乌斯反演

以下笔记整理自:《算法设计编程实验》吴永辉

1.结论

1.1 莫比乌斯函数:莫比乌斯函数可以看做一个辅助函数,它在莫比乌斯反演公式中用到。

1.2 莫比乌斯反演:莫比乌斯反演公式是 根据和函数来求算数函数的一个公式。

1.3 算数函数:所有在正整数上运算的函数称为算数函数。

1.4 和函数:设 f 是算数函数,f 的和函数为F(n) = \sum_{ d|n } f(d)。其中d为n的约数,所以 f 的和函数F(n)就是n的所有约数算数函数之和。

1.5 总结:如果我们已知和函数,想求其对应的算数函数,那么我们可以根据和函数的定义来反推其算数函数,反推出的公式叫莫比乌斯反演公式。又因为莫比乌斯反演公式具有普适性与抽象性(即对求每个算数函数,该公式都适用),为了达到这种普适性,需要一个辅助函数,就叫做莫比乌斯函数,它本质上是和函数的系数。

2.前置概念

2.1 欧拉函数:定义自寻。设n的欧拉函数为phi(n)。

2.2 积性函数:定义自寻。欧拉函数是积性函数,但不是完全积性函数。

2.3 欧拉函数公式:

  • 如果p是一个素数,且k是正整数,则phi(p^k) = p^k - p^(k-1)。
  • 如果m和n是互素的正整数,则phi(mn) = phi(m)*phi(n)。

2.4 唯一分解定理:任意一个自然数n都可以分解为若干个素数之积(没说不同素数啊)。

3.莫比乌斯函数

3.1 莫比乌斯函数的作用:见1.1。

3.2 莫比乌斯函数的定义:

如果n有平方因子,则\mu (n) = 0;如果n没有平方因子,并且分解后有奇数个素因子,则\mu (n) = -1;如果n没有平方因子,且分解后有偶数个素因子,则\mu (n) = 1

3.3 莫比乌斯函数求法(伪代码):

3.4 代码实例:

#include<cstdio>
const int maxn = 1e5;
int v[maxn],miu[maxn];
void mobius(int n){
	for(int i = 1;i <= n;i++)	miu[i] = 1,v[i] = 0;
	for(int i = 1;i <= n;i++){
		if(v[i])	continue;
		miu[i] = -1;
		for(int j = 2*i;j <= n;j += i){
			v[j] = 1;
			if((j/i)%i == 0)	miu[j] = 0;
			else miu[j] *= -1;
		}
	}	
}
int main(){
	mobius(maxn);
}

4.莫比乌斯反演公式

4.1 莫比乌斯反演公式:设f是算数函数,F是f的和函数,F(n) = \sum _{d|n} f(d),则f(n) = \sum _{d|n} \mu (d)F(n/d),其中n是正整数。

4.2 

 

posted @ 2019-01-27 14:21  Dr_Lo  阅读(372)  评论(0编辑  收藏  举报