莫比乌斯反演

 

 

参考链接:https://oi-wiki.org/math/mobius/#_2

莫比乌斯反演:对于一些函数 f(x),如果很难直接求出它的值,而容易求出其倍数和或约数和 g(x) ,那么可以通过莫比乌斯反演简化运算,求得 f(x) 的值。

开始学习莫比乌斯反演前,我们需要一些前置知识:数论分块与整数项积性函数 、 Dirichlet 卷积 、 莫比乌斯函数


数论分块与整数项:

引理1:

证明:

引理2:

证明:

对于 ,种取值。

对于,有,也只有种取值。

数论分块:

考虑含有求和的式子,对于任意一个i(i<=n),我们需要找到一个最大的j(i<j<n),使得

证明:

利用上述结论,我们每次分[i,j]为一块,分块求和即可。

代码实现

for(int i = 1, j; i <= n;i = j+1)
{
    j = n / (n / i);
    ans += (j-i+1)*(n/i+n/i)/2;//一块求,前面为等差数列求和公式
    printf("%d  %d\n", i, j);
}

积性函数:

定义:

对于所有互质( gcd( a,b ) =1)的整数 a 和 b ,有性质 f ( ab ) = f( a )f( b )。

性质:

若 f( x ) 和 g( x )均是积性函数,那么以下函数h( x )也是积性函数:

 积性函数举例(即以下函数都是积性函数,都可以利用积性函数的性质):

  • ——摘自百度百科

φ(n) -欧拉函数

μ(n) -莫比乌斯函数(关于非平方数的质因子数目)

gcd(n,k) -最大公因子,当k固定的情况

d(n) -n的正因子数目

σ(n) -n的所有正因子之和

σk(n) - 因子函数,n的所有正因子的k次幂之和,当中k可为任何复数。

1(n) -常数函数,定义为 1(n) = 1 (完全积性)

Id(n) -单位函数,定义为 Id(n) = n(完全积性)

Idk(n) -幂函数,对于任何复数、实数k,定义为Idk(n) = n^k (完全积性)

λ(n) -刘维尔函数,关于能整除n的质因子的数目


Dirichlet卷积:

更为详尽的博客:

定义

定义数论函数 f 和 g 的迪利克雷卷积为h(x),则 h( x ) = ( f * g )( n ) 

性质:

迪利克雷卷积满足结合律和交换率,对加法满足交换率。

其中单位元为ϵ,ϵ(n)=[n=1]。

常见的迪利克雷卷积:


莫比乌斯函数:

学习了狄利克雷卷积后,我们来看以下几个常见的积性函数:

  • 常函数:I(n)=1
  • 单位元为ϵ,ϵ(n)=[n=1](即只有当n等于1时,ϵ(1)=1,其余情况都为0)
  • ϵ∗f=f
  • 已知函数f,定义函数f的逆f^−1,满足f∗f^−1=ϵ,且积性函数的逆也是积性函数
  • 由上一条可得f^−1(1)=1/f(1)

莫比乌斯函数就是一个积性函数,并且含有以下的性质:

 证明:

其中

那么

根据二项式定理,该公式在k=0或者n=1时为1,否则为0。

反演推论:

线性筛

由于μ是积性函数,所以可以线性的筛莫比乌斯函数(线性筛可以求所有的积性函数,但是方法不相同)。

int miu[10000];
void Miu() { 
    miu[1] = 1;
    for (int i = 2; i <= n; ++i) 
    {
        if (!flg[i])
        {
            p[++tot] = i;
            miu[i] = -1;
        }
        for (int j = 1; j <= tot && i * p[j] <= n; ++j) 
        {
            flg[i*p[j]]=1;
            if (i%p[j]==0)
            {
                miu[i*p[j]]=0;
                break;
            }
            miu[i*p[j]]=-miu[i];
        }
    }
}

莫比乌斯反演

设f(n)、g(n)为两个莫比乌斯函数。

如果有

那么

 证明:

原命题为,已知,证明

易知如下转化:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值