[算法模板]莫比乌斯反演

莫比乌斯反演

先安利一下隔壁lsj大佬的博客:lsj-莫比乌斯反演-让我们从基础开始

在lsj大佬的博客里有一个比较重要的公式证明:

\(d(ij)=\displaystyle\sum_{x\mid i}\sum_{y\mid j}[gcd(x,y)=1]\)

莫比乌斯函数

\[ \mu(u)=\left\{\begin{split} &1&\ \text{若}n=1\\ &(-1)^k&\ \text{若}n\text{无平方因子数,且}n=p_1p_2\cdots p_k\\ &0&\ \text{若}n\text{有大于1的平方因数} \end{split}\right. \]

\(\mu\)函数性质:\(\displaystyle\sum _{d\mid n} \mu(d)=[n=1]\)

\(\phi\)函数性质:\(\displaystyle\sum _{d\mid n}\phi (d)=n\)

显然:

\(\displaystyle\sum _{d\mid gcd(i,j) } \mu(d)=[gcd(i,j)=1]\)

\(\displaystyle\sum _{d\mid gcd(i,j)}\phi (d)=gcd(i,j)\)

筛法

莫比乌斯函数可以用线性筛筛出

代码引自litble-初涉莫比乌斯反演(附带例题)

void init(){
    miu[1]=1;
    for(int i=2;i<=100000;i++){
        if(!is[i]){pri[++tot]=i;miu[i]=-1;}
        for(int j=1;j<=tot;j++){
            int k=pri[j]*i;if(k>100000)break;
            is[k]=1;
            if(i%pri[j]==0){miu[k]=0;break;}
            else miu[k]=-miu[i];
        }
    }
}

1669439-20190627163958202-783761727.jpg

转载于:https://www.cnblogs.com/GavinZheng/p/11097983.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值