莫比乌斯反演与杜教筛

莫比乌斯反演

我们知道积性函数可以迪雷克卷积
我们知道F(x)=Σd|xf(d)
要求f(x)
两面卷上一个μ
F ∗ μ = f ∗ 1 ∗ μ F*μ=f*1*μ Fμ=f1μ
F ∗ μ = f ∗ ( 1 ∗ μ ) F*μ=f*(1*μ) Fμ=f(1μ)
F ∗ μ = f ∗ e F*μ=f*e Fμ=fe
F ∗ μ = f F*μ=f Fμ=f
也就是 f = Σ d ∣ x μ ( x / d ) f ( d ) f=Σd|x μ(x/d)f(d) f=Σdxμ(x/d)f(d)
其实就是应为简单的迪雷克卷积

而我们用的最多的就是 e ( x ) = [ x = = 1 ] e(x)=[x==1] e(x)=[x==1]
也就是 Σ d ∣ x μ ( x / d ) Σd|x μ(x/d) Σdxμ(x/d)这个东西

杜教筛

我们需要求f(x)的前缀和F(x)
然而 n 有时达到 100000000
O(n) 就不可做了
我们需要一个O(n^3/4)的做法—杜教筛
我们找一个函数g(x)与f(x)的迪雷克卷积的前缀和很好求
f ∗ g ( n ) = Σ d ∣ n f ( d ) ∗ g ( n / d ) f*g(n)=Σd|n f(d)*g(n/d) fg(n)=Σdnf(d)g(n/d)
然后 Σ i = 1   n f ∗ g ( i ) = Σ i = 1   n Σ d ∣ i f ( i / d ) ∗ g ( d ) Σi=1~n f*g(i)=Σi=1~n Σd|i f(i/d)*g(d) Σi=1 nfg(i)=Σi=1 nΣdif(i/d)g(d)
然后先枚举d Σ i = 1   n f ∗ g ( i ) = Σ d = 1   n g ( d ) ∗ Σ d ∣ i f ( i / d ) Σi=1~n f*g(i)=Σd=1~n g(d)* Σd|i f(i/d) Σi=1 nfg(i)=Σd=1 ng(d)Σdif(i/d)
然后 Σ i = 1   n f ∗ g ( i ) = Σ d = 1   n g ( d ) ∗ Σ i = 1   n / d f ( i ) Σi=1~n f*g(i)=Σd=1~n g(d)* Σi=1~n/d f(i) Σi=1 nfg(i)=Σd=1 ng(d)Σi=1 n/df(i)
然后 Σ i = 1   n f ∗ g ( i ) = Σ d = 1   n g ( d ) ∗ F ( n / d ) Σi=1~n f*g(i)=Σd=1~n g(d)* F(n/d) Σi=1 nfg(i)=Σd=1 ng(d)F(n/d)
Σ i = 1   n f ∗ g ( i ) = g ( 1 ) ∗ F ( n ) + Σ d = 2   n g ( d ) ∗ F ( n / d ) Σi=1~n f*g(i)=g(1)*F(n)+Σd=2~n g(d)* F(n/d) Σi=1 nfg(i)=g(1)F(n)+Σd=2 ng(d)F(n/d)
移项,得 g ( 1 ) ∗ F ( n ) = Σ i = 1   n f ∗ g ( i ) − Σ d = 2   n g ( d ) ∗ F ( n / d ) g(1)*F(n)=Σi=1~n f*g(i)-Σd=2~n g(d)* F(n/d) g(1)F(n)=Σi=1 nfg(i)Σd=2 ng(d)F(n/d)
然后(n/d)这个东西就可以除法分块了

你可能感兴趣的:(数论)