正题
这个东西是比较恶心的,因为一开始你可能看着公式很蒙蔽,但是最后发现其实这些公式没有用。
那最重要的两条公式就是
如果有: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
)