您的位置:首页 > 其它

莫比乌斯反演

2016-04-19 17:27 246 查看
定理:F(n)和f(n)是定义在非负整数集合上的两个函数,并且满足条件F(n)=∑d|nf(d)F(n)=\sum_{d|n}f(d),那么我们得到结论f(n)=∑d|nμ(d)F(n/d)f(n)=\sum_{d|n}\mu(d)F(n/d)。

在上面的公式中有一个函数μ(d)\mu(d),它的定义如下:

(1)若d=1,那么μ(d)=1\mu(d)=1.

(2)若d=p1p2⋯pkp1p2\cdots pk,均为互异素数,那么μ(d)=(−1)k\mu(d)=(-1)^k.

(3)其它情况下μ(d)=0\mu(d)=0.

对于函数μ(d)\mu(d),它有如下的常见性质:

对任意正整数n有



对任意正整数n有



//求1-n的函数值
bool vis[MAX+10];
int mu[MAX+10],prime[MAX+10],cnt;
void mobi(int n){
memset(vis,false,sizeof(vis));
mu[1]=1;
cnt=0;
for(int i=2;i<=n;++i){
if(!vis[i]){
prime[cnt++]=i;
mu[i]=-1;
}
for(int j=0;j<cnt&&i*prime[j]<=n;++j){
vis[i*prime[j]]=1;
if(i%prime[j]) mu[i*prime[j]]=-mu[i];
else{
mu[i*prime[j]]=0;
break;
}
}
}
}


//求某个数对应的函数值。
int mobi(int n){
int m=1;
for(int i=2;i*i<=n;++i)
if(n%i==0){
m*=-1;
int k=0;
do{
k++;
if(k>1){
m=0;
break;
}
n/=i;
}while(n%i==0);
}
if(n>1) m*=-1;
return m;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: