莫比乌斯反演与杜教筛

- 初识数论常见积性函数:欧拉函数 φ \varphi φ,莫比乌斯函数 μ \mu μ

        \ \ \ \ \ \,      所谓积性函数,就是对于一个函数 f ( x ) f(x) f(x),若是对于任意 x 1 x_1 x1 x 2 x_2 x2满足 f ( x 1 ) × f ( x 2 ) = f ( x 1 × x 2 ) f(x_1)\times f(x_2)=f(x_1\times x_2) f(x1)×f(x2)=f(x1×x2)。对于任何积性函数 f ( x ) f(x) f(x),都有 f ( 1 ) = 1 f(1)=1 f(1)=1

  • 欧拉函数 φ ( x ) \varphi(x) φ(x)的意义:在 [ 1 , x ] [1,x] [1,x]内,与 x x x互质的个数。

    1 1 1.若 x x x为素数, φ ( x ) = x − 1 \varphi(x)=x-1 φ(x)=x1;

    2 2 2.若 x % p = 0 x\%p=0 x%p=0 φ ( x ⋅ p ) = φ ( x ) ⋅ p \varphi(x\cdot p)=\varphi(x)\cdot p φ(xp)=φ(x)p;

    3 3 3.若 x % p ≠ 0 x\%p\neq 0 x%p̸=0,且 x x x为素数, φ ( x ⋅ p ) = φ ( x ) ⋅ ( p − 1 ) \varphi(x\cdot p)=\varphi(x)\cdot (p-1) φ(xp)=φ(x)(p1);

    【证明戳这里~~(%%%大巨佬orz)~~】

  • 莫比乌斯函数 μ ( x ) \mu(x) μ(x)的意义:设 x x x的不同质因子个数为 a a a μ ( x ) = ( − 1 ) a \mu(x)=(-1)^{a} μ(x)=(1)a;当n存在平方因子时, μ ( x ) = 0 \mu(x)=0 μ(x)=0

    1 1 1.若 x x x有奇数个不同质因数, μ ( x ) = − 1 \mu(x)=-1 μ(x)=1

    2 2 2.若 x x x有偶数个不同质因数, μ ( x ) = 1 \mu(x)=1 μ(x)=1

    3 3 3.若 x x x有平方因子, μ ( x ) = 0 \mu(x)=0 μ(x)=0

        \ \ \ \ \ \,      还有一些简单的积性函数,在这里一并介绍了:

ϵ ( x ) = { 1 x = 1 0 x > 1 ϵ(x)=\begin{cases}1&x=1\\0&x>1\end{cases} ϵ(x)={10x=1x>1

i d ( x ) = x id(x)=x id(x)=x

i d k ( x ) = x k id^k(x)=x^k idk(x)=xk

σ ( x ) = ∑ i ∣ x 1 \sigma(x)=\sum_{i|x}1 σ(x)=ix1

1 1 1


- 数论分块

        \ \ \ \ \ \,      很多时候,我们会遇到这样的式子:

∑ i = 1 n f ( i ) × g ( ⌊ n i ⌋ ) \sum_{i=1}^{n}f(i)\times g\left(\left\lfloor\frac{n}{i}\right\rfloor\right) i=1nf(i)×g(in)

        \ \ \ \ \ \,      若是我们已经提前知道了 f ( x ) f(x) f(x) x ∈ [ 1 , n ] x\in [1,n] x[1,n]的值了,但是需要多次计算上面形式的式子的值,每次询问复杂度是 O ( n ) O(n) O(n)的,显然在询问很多的时候,没有很划算。

        \ \ \ \ \ \,      我们枚举了很多 i i i,使得很多 ⌊ n i ⌋ \left\lfloor\frac{n}{i}\right\rfloor in都相等,所以我们可以把 ∑ i = 1 n \sum_{i=1}^{n} i=1n,分成$\sqrt{n}\ 块 , 使 得 每 一 块 的 块,使得每一块的 使\left\lfloor\frac{n}{i}\right\rfloor 都 相 等 , 这 样 我 们 可 以 通 过 结 合 律 得 到 下 面 的 式 子 , 都相等,这样我们可以通过结合律得到下面的式子, O(n) 预 处 理 预处理 {\rm sum}(x)=\sum_{i=1}^{x}f(i) , 来 简 化 询 问 复 杂 度 到 ,来简化询问复杂度到 O(\sqrt{n})$:

int Get_ans(int n){
  long long ans=0;
  for(int l=1,r;l<=n;l=r+1){
    r=n/(n/l);
    ans+=g(n/l)*(sum[r]-sum[l-1]);
  }
  return ans;
}

- 【积性函数的线性筛】


- 狄利克雷卷积

( f ∗ g ) ( n ) = ∑ x ∣ n f ( x ) × g ( n x ) (f*g)(n)=\sum_{x|n}f(x)\times g\left(\frac{n}{x}\right) (fg)(n)=xnf(x)×g(xn)

既:

( f ∗ g ) ( n ) = ∑ x y = n f ( x ) × g ( y ) (f*g)(n)=\sum_{xy=n}f(x)\times g(y) (fg)(n)=xy=nf(x)×g(y)

  • 狄利克雷卷积的性质:

    1.交换律: f ∗ g = g ∗ f f*g=g*f fg=gf

    2.结合律: ( f ∗ g ) ∗ h = g ∗ ( f ∗ h ) (f*g)*h=g*(f*h) (fg)h=g(fh) ( a × f ) ∗ g = a × ( f ∗ g ) (a\times f)*g=a\times (f*g) (a×f)g=a×(fg)

    3.分配律: ( f + g ) ∗ h = f ∗ h + g ∗ h (f+g)*h=f*h+g*h (f+g)h=fh+gh

    4.单位元: ϵ ∗ f = f ϵ*f=f ϵf=f;其中 ϵ ( x ) = { 1 x = 1 0 x &gt; 1 ϵ(x)=\begin{cases}1&amp;x=1\\0&amp;x&gt;1\end{cases} ϵ(x)={10x=1x>1

    5.逆元: 对于每个 f ( 1 ) ≠ 0 f(1)\neq0 f(1)̸=0的函数,都存在一个函数 g g g使得 f ∗ g = ϵ f*g=ϵ fg=ϵ

    6.两个积性函数的狄利克雷卷积是积性函数。

      &ThinSpace; \ \ \ \ \ \,      如何求一个函数的逆:

ϵ = f ∗ g = ∑ x ∣ n f ( x ) × g ( n x ) = f ( 1 ) × g ( n ) + ∑ x ∣ n , i ≠ 1 f ( x ) × g ( n x ) = [ n = 1 ] \begin{aligned}ϵ&amp;=f*g\\ &amp;=\sum_{x|n}f(x)\times g\left(\frac{n}{x}\right)\\ &amp;=f(1)\times g(n)+\sum_{x|n,i\neq1}f(x)\times g\left(\frac{n}{x}\right)\\&amp;=[n=1]\end{aligned} ϵ=fg=xnf(x)×g(xn)=f(1)×g(n)+xn,i̸=1f(x)×g(xn)=[n=1]
      &ThinSpace; \ \ \ \ \ \,      所以有:
f ( 1 ) × g ( n ) = [ n = 1 ] − ∑ x ∣ n , i ≠ 1 f ( x ) × g ( n x ) f(1)\times g(n)=[n=1]-\sum_{x|n,i\neq1}f(x)\times g\left(\frac{n}{x}\right) f(1)×g(n)=[n=1]xn,i̸=1f(x)×g(xn)
g ( n ) = 1 f ( 1 ) ( [ n = 1 ] − ∑ x ∣ n , i ≠ 1 f ( x ) × g ( n x ) ) g(n)=\frac{1}{f(1)}\left([n=1]-\sum_{x|n,i\neq1}f(x)\times g\left(\frac{n}{x}\right)\right) g(n)=f(1)1[n=1]xn,i̸=1f(x)×g(xn)

      &ThinSpace; \ \ \ \ \ \,      其中 μ \mu μ就是函数 1 1 1的逆,也就是说 μ ∗ 1 = ϵ \mu*1=ϵ μ1=ϵ

-莫比乌斯反演

      &ThinSpace; \ \ \ \ \ \,      莫比乌斯反演的本质就是利用性质 μ ∗ 1 = ϵ \mu*1=ϵ μ1=ϵ,改变枚举方式,降低式子的复杂度。

      &ThinSpace; \ \ \ \ \ \,      最常见的操作是,反演式子 ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = 1 ] \sum_{i=1}^n\sum_{j=1}^{m}[{\rm gcd}(i,j)=1] i=1nj=1m[gcd(i,j)=1]:

∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = 1 ] \sum_{i=1}^n\sum_{j=1}^{m}[{\rm gcd}(i,j)=1] i=1nj=1m[gcd(i,j)=1]

∑ i = 1 n ∑ j = 1 m ϵ ( g c d ( i , j ) ) \sum_{i=1}^n\sum_{j=1}^{m}ϵ({\rm gcd}(i,j)) i=1nj=1mϵ(gcd(i,j))

∑ i = 1 n ∑ j = 1 m ( μ ∗ 1 ) ( g c d ( i , j ) ) \sum_{i=1}^n\sum_{j=1}^{m}(\mu*1)({\rm gcd}(i,j)) i=1nj=1m(μ1)(gcd(i,j))

∑ i = 1 n ∑ j = 1 m ∑ d ∣ g c d ( i , j ) μ ( d ) × 1 \sum_{i=1}^n\sum_{j=1}^{m}\sum_{d|{\rm gcd}(i,j)}\mu(d)\times 1 i=1nj=1mdgcd(i,j)μ(d)×1

∑ i = 1 n ∑ j = 1 m ∑ d = 1 m i n ( n , m ) μ ( d ) [ d ∣ g c d ( i , j ) ] \sum_{i=1}^n\sum_{j=1}^{m}\sum_{d=1}^{{\rm min}(n,m)}\mu(d)[d|{\rm gcd}(i,j)] i=1nj=1md=1min(n,m)μ(d)[dgcd(i,j)]

∑ d = 1 m i n ( n , m ) μ ( d ) ∑ i = 1 n ∑ j = 1 m [ d ∣ g c d ( i , j ) ] \sum_{d=1}^{{\rm min}(n,m)}\mu(d)\sum_{i=1}^n\sum_{j=1}^{m}[d|{\rm gcd}(i,j)] d=1min(n,m)μ(d)i=1nj=1m[dgcd(i,j)]

∑ d = 1 m i n ( n , m ) μ ( d ) ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ 1 \sum_{d=1}^{{\rm min}(n,m)}\mu(d)\sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}\sum_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}1 d=1min(n,m)μ(d)i=1dnj=1dm1

∑ d = 1 m i n ( n , m ) μ ( d ) ∑ i = 1 ⌊ n d ⌋ 1 ∑ j = 1 ⌊ m d ⌋ 1 \sum_{d=1}^{{\rm min}(n,m)}\mu(d)\sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor}1\sum_{j=1}^{\left\lfloor\frac{m}{d}\right\rfloor}1 d=1min(n,m)μ(d)i=1dn1j=1dm1

∑ d = 1 m i n ( n , m ) μ ( d ) ⌊ n d ⌋ ⌊ m d ⌋ \sum_{d=1}^{{\rm min}(n,m)}\mu(d){\left\lfloor\frac{n}{d}\right\rfloor}{\left\lfloor\frac{m}{d}\right\rfloor} d=1min(n,m)μ(d)dndm

      &ThinSpace; \ \ \ \ \ \,      例题


- 杜教筛

【铃悬的数学小讲堂——杜教筛】

      &ThinSpace; \ \ \ \ \ \,      杜教筛是求积性函数的前缀和的筛法,复杂度可以达到小于线性的 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)

      &ThinSpace; \ \ \ \ \ \,      对于一个积性函数 f f f,令 S ( n ) = ∑ i = 1 n f ( i ) S(n)=\sum_{i=1}^nf(i) S(n)=i=1nf(i),再新定义一个函数 g g g,则有:

∑ i = 1 n ( f ∗ g ) ( i ) = ∑ i = 1 n ∑ x × y = i f ( x ) × g ( y ) = ∑ y = 1 n g ( y ) ∑ x × y ≤ n f ( x ) = ∑ y = 1 n g ( y ) ∑ x = 1 ⌊ n y ⌋ f ( x ) = ∑ y = 1 n g ( y ) S ( ⌊ n y ⌋ ) \begin{aligned}&amp;\sum_{i=1}^n(f*g)(i)\\=&amp;\sum_{i=1}^n\sum_{x\times y=i}f(x)\times g(y)\\=&amp;\sum_{y=1}^ng(y)\sum_{x\times y\leq n}f(x)\\=&amp;\sum_{y=1}^ng(y)\sum_{x=1}^{\left\lfloor\frac{n}{y}\right\rfloor}f(x)\\=&amp;\sum_{y=1}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)\end{aligned} ====i=1n(fg)(i)i=1nx×y=if(x)×g(y)y=1ng(y)x×ynf(x)y=1ng(y)x=1ynf(x)y=1ng(y)S(yn)

      &ThinSpace; \ \ \ \ \ \,      那么就有:

∑ i = 1 n ( f ∗ g ) ( i ) = g ( 1 ) S ( n ) + ∑ y = 2 n g ( y ) S ( ⌊ n y ⌋ ) \sum_{i=1}^n(f*g)(i)=g(1)S(n)+\sum_{y=2}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right) i=1n(fg)(i)=g(1)S(n)+y=2ng(y)S(yn)

      &ThinSpace; \ \ \ \ \ \,      既:

g ( 1 ) S ( n ) = ∑ i = 1 n ( f ∗ g ) ( i ) − ∑ y = 2 n g ( y ) S ( ⌊ n y ⌋ ) g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{y=2}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right) g(1)S(n)=i=1n(fg)(i)y=2ng(y)S(yn)

S ( n ) = ∑ i = 1 n ( f ∗ g ) ( i ) − ∑ y = 2 n g ( y ) S ( ⌊ n y ⌋ ) g ( 1 ) S(n)=\frac{\sum_{i=1}^n(f*g)(i)-\sum_{y=2}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)}{g(1)} S(n)=g(1)i=1n(fg)(i)y=2ng(y)S(yn)

S ( n ) = ∑ i = 1 n ( f ∗ g ) ( i ) − ∑ y = 2 n g ( y ) S ( ⌊ n y ⌋ ) S(n)={\sum_{i=1}^n(f*g)(i)-\sum_{y=2}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)} S(n)=i=1n(fg)(i)y=2ng(y)S(yn)

      &ThinSpace; \ \ \ \ \ \,      若是函数 ( f ∗ g ) (f*g) (fg) g g g的前缀和都可以 O ( 1 ) O(1) O(1)地算出来,那么我们计算 S ( n ) S(n) S(n)的值的时候递归处理,便可以优化复杂度到 O ( n 3 4 ) O(n^{\frac{3}{4}}) O(n43)

      &ThinSpace; \ \ \ \ \ \,      但若是我们先线性预处理出 S ( i )   i ∈ [ 1 , n 2 3 ] S(i)\ {i\in[1,n^{\frac{2}{3}}]} S(i) i[1,n32]的值,复杂度就可以优化到 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)

      &ThinSpace; \ \ \ \ \ \,      那么现在的问题是如何找到这个神奇的函数 g g g

  • 对于 φ ( x ) \varphi(x) φ(x)

    φ ( x ) = ∏ p ∣ x , p   i s   p r i m e p k ( p − 1 ) p = x × ∏ p ∣ x , p   i s   p r i m e ( 1 − 1 p ) \begin{aligned}\varphi(x)=&amp;\prod_{p|x,p\ \rm{is\ prime}}\frac{p^k(p-1)}{p}\\=&amp;x\times \prod_{p|x,p\ \rm{is\ prime}}\left(1-\frac{1}{p}\right)\end{aligned} φ(x)==px,p is primeppk(p1)x×px,p is prime(1p1)

    ( φ ∗ 1 ) ( x ) = ∑ i ∣ x φ ( i ) × 1 ( x i ) = ∑ i ∣ x φ ( i ) = ∑ i ∣ x i × ∏ p ∣ i , p   i s   p r i m e ( 1 − 1 p ) \begin{aligned}(\varphi*1)(x)=&amp;\sum_{i|x}\varphi(i)\times 1\left(\frac{x}{i}\right)\\=&amp;\sum_{i|x}\varphi(i)\\=&amp;\sum_{i|x}i\times \prod_{p|i,p\ \rm{is\ prime}}\left(1-\frac{1}{p}\right)\end{aligned} (φ1)(x)===ixφ(i)×1(ix)ixφ(i)ixi×pi,p is prime(1p1)

    显然 ( φ ∗ 1 ) ( x ) (\varphi*1)(x) (φ1)(x) x x x为素数的次方情况下, ( φ ∗ 1 ) ( x ) = x (\varphi*1)(x)=x (φ1)(x)=x,而 ( φ ∗ 1 ) ( x ) (\varphi*1)(x) (φ1)(x)又为积性函数,可以证明在定义域下 ( φ ∗ 1 ) ( x ) = x (\varphi*1)(x)=x (φ1)(x)=x,既 φ ∗ 1 = i d \varphi*1=id φ1=id

    所以我们选取 g = 1 g=1 g=1, ( f ∗ g ) = i d (f*g)=id (fg)=id,容易求和。

long long Sum_id(int x){return 1ll*x*(x+1)/2;}
long long Sum_1(int l,int r){return 1ll*r-l+1;}
long long g1=1ll;
long long Sum_phi(int x){
  long long ret=Sum_id(x);
  for(int i=2,j;i<=x;i=j+1)
  j=x/(x/i),ret-=Sum_1(i,j)*Sum_phi(x/i);
  return ret;
}
  • 对于 μ ( x ) \mu(x) μ(x)

    已知 μ ∗ 1 = ϵ \mu*1=ϵ μ1=ϵ

    所以我们选取 g = 1 g=1 g=1, ( f ∗ g ) = ϵ (f*g)=ϵ (fg)=ϵ,容易求和。

long long Sum_e(int x){return 1ll;}
long long Sum_1(int l,int r){return 1ll*r-l+1;}
long long g1=1ll;
long long Sum_mu(int x){
  long long ret=Sum_e(x);
  for(int i=2,j;i<=x;i=j+1)
  j=x/(x/i),ret-=Sum_1(i,j)*Sum_mu(x/i);
  return ret;
}
  • 注意:杜教筛套杜教筛复杂度还是 O ( n 2 3 ) O(n^\frac{2}{3}) O(n32),因为实际上他们是并列进行的。

  • 贝尔级数

          &ThinSpace; \ \ \ \ \ \,      对于其他积性函数,为了找到满足条件的 g g g,我们引入贝尔级数,需要用到生成函数的姿势,但是实际上只需要记住下面的公式就够用了:

          &ThinSpace; \ \ \ \ \ \,      对于积性函数 f f f,定义 f f f p p p的贝尔级数为:

    f p ( x ) = ∑ i = 0 ∞ f ( p i ) x i f_p(x)=\sum_{i=0}^{\infty}f(p^i)x^i fp(x)=i=0f(pi)xi

          &ThinSpace; \ \ \ \ \ \,      一个完全积性函数的贝尔级数为几何级数:

    f p ( x ) = 1 1 − f ( p ) × x f_p(x)=\frac{1}{1-f(p)\times x} fp(x)=1f(p)×x1

          &ThinSpace; \ \ \ \ \ \,      例如(“*”完全积性函数):

    • * ϵ p ( x ) = 1 ϵ_p(x)=1 ϵp(x)=1

    • * 1 p ( x ) = 1 1 − x 1_p(x)=\frac{1}{1-x} 1p(x)=1x1

    • * i d p k ( x ) = 1 1 − p k ⋅ x id^k_p(x)=\frac{1}{1-p^k\cdot x} idpk(x)=1pkx1

    • μ p ( x ) = 1 − x \mu_p(x)=1-x μp(x)=1x

    • σ p ( x ) = 1 ( 1 − x ) 2 \sigma_p(x)=\frac{1}{(1-x)^2} σp(x)=(1x)21

    • ( σ 1 ) p ( x ) = 1 1 − σ 1 ( p ) x + p x 2 (\sigma_1)_p(x)=\frac{1}{1-\sigma_1(p)x+px^2} (σ1)p(x)=1σ1(p)x+px21 ——> [ ( σ k ) p ( x ) = 1 1 − σ k ( p ) x + p k x 2 ] \left[(\sigma_k)_p(x)=\frac{1}{1-\sigma_k(p)x+p^kx^2}\right] [(σk)p(x)=1σk(p)x+pkx21]

    • φ p ( x ) = 1 − x 1 − p ⋅ x \varphi_p(x)=\frac{1-x}{1-p\cdot x} φp(x)=1px1x

          &ThinSpace; \ \ \ \ \ \,      有了这个东西,我们边可以把狄利克雷卷积化成一般卷积的形式:

    ( f ∗ g ) p ( x ) = f p ( x ) × g p ( x ) (f*g)_p(x)=f_p(x)\times g_p(x) (fg)p(x)=fp(x)×gp(x)

          &ThinSpace; \ \ \ \ \ \,      再带回去就可以得到我们想要的 g g g g ∗ f g*f gf,主观感觉非常复杂。


  • 一些比较常见的容易求的卷积

    • μ ∗ σ = 1 \mu*\sigma=1 μσ=1

    • i d ∗ i d = n id*id=n idid=n

    • φ ∗ 1 = i d \varphi*1=id φ1=id

    • μ ∗ i d = φ \mu*id=\varphi μid=φ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值