论莫比乌斯函数及其应用

本文详细介绍了莫比乌斯函数的概念、性质及其在数论中的应用,包括如何利用莫比乌斯反演简化计算复杂度,并通过实例展示了莫比乌斯函数在解决算法竞赛问题中的作用。
摘要由CSDN通过智能技术生成

引言:

莫比乌斯函数是为解决容斥原理问题而定义的数论函数,但其功能远远超出容斥原理的范围,可以通过由该函数衍生出的莫比乌斯反演化简很多复杂的式子,降低运算复杂度。但莫比乌斯反演需要一定的数学知识和推导能力,于是我在此介绍莫比乌斯函数及其应用。

摘要:

莫比乌斯函数与其他数论函数以狄利克雷卷积为纽带相互联系相互转化,构成莫比乌斯反演算法,可实现快速计算复杂和式。

正文:

莫比乌斯函数形式化的定义是:

  N=\prod\limits_{i=1}^m p_i^{c_i} 

\mu(N)=\begin{cases}0&\exists x\in[1,m],c_x\ge 2\\1&2\mid m,\forall x\in[1,m],c_x=1\\-1&2 \nmid m,\forall x\in[1,m],c_x=1\end{cases}

通俗来讲,就是若含有平方因子,函数值为零;否则若有偶数个因子值为一,奇数为负一。这显然是一个积性函数。既然是积性函数,在互质时便可由已知函数值的集合导出位置的函数值,不断将位置集合的元素纳出已知集合,实现求解;而在非互质时便可由定义直接将函数值赋为0。结合线性筛法,可以在线性时间内计算 1~N 之间的所有函数值。多数数论函数都满足积性函数的性质,且在非互质时可使用特殊的方法快速求解,因此使用线性筛成为了计算许多数论函数值的手段。另外,如果只求单点函数值,直接分解质因数就行。

#include <bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int v[N],p[N];
int mu[N],cnt;
inline void isprime(int maxV)	{
	mu[1]=1;
	for(int i=2;i<=maxV;i++)	{
		if(!v[i])
			v[i]=i,p[++cnt]=i,mu[i]=-1;
		for(int j=1;j<=cnt;j++)	{
			if(p[j]>v[i]||p[j]>maxV/i) break;
			v[i*p[j]]=p[j];
			if(i%p[j]) mu[i*p[j]]=-mu[i];
			else mu[i*p[j]]=0;
		}
	}
	for(int i=1;i<=maxV;i++)
		printf("%d\n",mu[i]);
	return;
}
int main(void)
{
	isprime(1e3+7);
	return 0;
}

当然只有这些是远远不够的,反演才是重中之重。首先介绍一个概念:狄利克雷卷积。其形式化的内容是:如果定义在自然数上的函数 f(N) 满足

 h(N)=\sum\limits_{d\mid N} f(d) g(\frac{N}{d})

则可以推出

f(N)=\sum\limits_{d\mid N} h(d) \mu(\frac{N}{d}) g(\frac{N}{d})

由此可以得到一些常用结论:

1 * \mu=e        \mu * id=\phi        1 * id=\sigma        1*1=d

1*d=\phi        1*\phi=id        d*\phi=\sigma

这就意味着莫比乌斯函数与其他数论函数,以及其他数论函数之间都可以以狄利克雷卷积为纽带相互转化。而迪利克雷卷积可实现将根号级复杂度向常数级的转变,这就是莫比乌斯反演可降低计算复杂度的原因所在。仔细考虑可以发现卷积满足交换结合律


例题:

解析: 

题目要求 \gcd(i,j)=d,显然可以转化为  gcd(i/d,j/d)=1。这不就是 e(N) 函数吗?于是根据这个思路,进行反演。根据卷积公式,可以得到:

\sum\limits_{d\mid N} 1(d) e(\frac{N}{d})=e(\frac{N}{N})=1=1(N)

e(N)=\sum\limits_{d\mid N} 1(d) \mu(\frac{N}{d})1(\frac{N}{d})=\sum\limits_{d\mid N}\mu(d)

所以带入可得:

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值