给出莫比乌斯函数的定义:
这里的n即u(i)中的i,即i=1时,u(1)=1;i大于1且i中某个质因子的幂超过1,则u(i)=0;否则,u(i)取决于其质因子个数的奇偶性。
这里给出两个莫比乌斯函数的性质:
简略证明性质1:
由唯一分解定理,在n的因子中,某个因子的质因子的幂超过1,那么u(d)=0,对于性质1我们不用管他,所以只研究质因子的幂全是1次的因子就行。假设n有质因子k个,那么,性质1可以转化成以下式子,即在k个质因子中选i个组成因子,因为i是奇数的时候,这个因子的莫比乌斯函数值是-1,所以奇数项全是负的,偶数项全是正的。
由二项式系数奇数项的和等于偶数项的和,在k>0时,这个式子不论k的奇偶,结果就是0;k=0时,即n=1时,这个式子的结果是1。
简略证明性质2:
先略过,会了再补充。
基于埃氏筛O(nloglogn)的方法求n以内的数的莫比乌斯函数:
const int N=1e6+10;
int mo[N];
void init(int n)
{
mo[1]=1;
for(int i=1;i<=n/2;i++)
{
if(mo[i]!=0)
{
for(int j=i*2;j<=n;j+=i)
mo[j]-=mo[i];
}
}
}
基于欧拉筛O(n)的方法求n以内的数的莫比乌斯函数:
const int N=1e6+10;
bool vis[N];
int p[N],mo[N],cnt=0;
void init(int n)
{
mo[1]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i])
{
p[++cnt]=i;
mo[i]=-1;
}
for(int j=1;j<=cnt;j++)
{
if(i*p[j]>n)
break;
vis[i*p[j]]=1;
if(i%p[j]==0)
break;
mo[i*p[j]]=-mo[i];
}
}
}