莫比乌斯反演

 莫比乌斯函数:

设 设 n = p_1 ^ {k_1} \cdot p_2 ^ {k_2} \cdot\cdots\cdot p_m ^ {k_m}n=p ​1 ​k ​1 ​​ ​​ ⋅p ​2 ​k ​2 ​​ ​​ ⋅⋯⋅p ​m ​k ​m ​​n = p_1 ^ {k_1} \cdot p_2 ^ {k_2} \cdot\cdots\cdot p_m ^ {k_m},其中 p为素数,则定义如下:

\mu(n) = \begin{cases} 1 & n = 1 \\ (-1) ^ m & \prod\limits_{i = 1} ^ {m} k_i = 1 \\ 0 & \textrm{otherwise}(k_i \gt 1) \end{cases}μ(n)=​⎩​⎪​⎪​⎪​⎨​⎪​⎪​⎪​⎧​​​1​(−1)​m​​​0​​​n=1​​i=1​∏​m​​k​i​​=1​otherwise

 

线性筛求莫比乌斯函数:

#include<bits/stdc++.h>
using namespace std;
int mu[120000],vis[120000],prime[120000],cnt;

void mbws(int n)
{
    mu[1] = 1;
    cnt = 0;
    for(int i = 2; i < n; i++)
    {
        if(!vis[i])
        {
            prime[cnt++] = i;
            mu[i] = -1;		//质数显然k=1
        }
        for(int j = 0; j < cnt && prime[j]*i < n; j++)
        {
            vis[prime[j]*i] = 1;
            if(i%prime[j] == 0)
                break;
            mu[i*prime[j]] = -mu[i];	//由于欧拉筛中,每个数只会被最小的质因子筛到一次,相当于这个数多了一个因子p[j],就相当于-mu[i](可以通过分类讨论理解)。
        }
    }

}
int main()
{
    int sum = 0;
    mbws(1200);
    for(int i = 1; i <= 120; i++)
    {
        printf("%d\n",mu[i]);
    }



    return 0;
}

莫比乌斯反演:
若 

F(n) = \sum_{d\mid n}f(d) ​d∣n

f(n) = \sum_{d\mid n}\mu(\frac n d)F(d) = \sum_{d\mid n}\mu(d)F(\frac n d)

或者

F(n) = \sum_{n\mid d}f(d)

f(n) = \sum_{n\mid d}\mu(\frac d n)F(d)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值