学习笔记第五节:莫比乌斯反演

正题

      2018/12/20:看到我以前写的东西真是有点可爱(恶心)呢,还是重新写吧

      现在在这里再来讲述一遍莫比乌斯反演。

      莫比乌斯反演基于一条公式\sum_{d\mid n} \mu(d) =[n=1]

      不懂的小伙伴先去找数论函数的介绍看看。

      假如现在要求\sum_{i=1}^n\sum_{j=1}^m [gcd(i,j)=1],n<=m<=10^{7}.开到更大可以用杜教筛来做

      那么我们可以把后面的[gcd(i,j)=1],换成\sum_{d\mid gcd(i,j)} \mu(d)

      就变成了

       学习笔记第五节:莫比乌斯反演_第1张图片

      那么我们又可以预处理\mu(d)的前缀和,又可以对后面的东西进行整除分块。

      时间就是O(\sqrt n)了。(认为n,m同阶)。

      程序中就是直接按照定义欧拉筛出mu(d),然后做一遍前缀和,后面整除分块本人喜欢这种写法。

mu[1]=1;
for(int i=2;i<=maxn;i++){
	if(!vis[i]) {p[++p[0]]=i;mu[i]=-1;}
	for(int j=1;j<=p[0] && (temp=i*p[j])

      其实莫比乌斯反演是这样的:

      有h=f*1,*为狄利克雷卷积。

      现在已知h,求f。

      那么两边同时成上\mu,得到f=h*\mu  。

你可能感兴趣的:(学习笔记)