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

正题

      这个东西是比较恶心的,因为一开始你可能看着公式很蒙蔽,但是最后发现其实这些公式没有用。

      那最重要的两条公式就是

如果有:F(n)=d|nf(d)

那么就有f(n)=d|nμ(d)F(nd)

就是如此简单,你只需要记住这个就行了。

第二,你需要明白μ函数的定义,即

当n=1时,函数值为1;当n=p1*p2*...*pk,p为质数且p互异,那么值就为(-1)^k;否则就为0.

那么证明不用我多说,这两条公式很简单。

要讲的是他的应用!!

首先,你可以用这个东西来求gcd为k的对数。

我们设f(x)=i=1~n j=1~m  [gcd(i,j)=x]

   再设F(x)=i=1~n j=1~m  [x | gcd(i,j)]=(n/x)*(m/x)

   那么就可以知道F(n)=n|dnf(d)

   倒过来推,可以发现f(d)很容易算!!

   那我们用除法分块优化一下,直接输出即可。

   时间复杂度从原来的n*m降到了sqrt(min(n,m));

   除法分块的意思就是,对于一对l和r,使他们被n除的数相等,即n/l=n/r,那么已知l,r=n/(n/l);

   再用l=r+1来跳到下一块即可。



F ( n ) = d|n f ( d )
F ( n ) = d|n f ( d )

猜你喜欢

转载自blog.csdn.net/deep_kevin/article/details/80224492