- 初识数论常见积性函数:欧拉函数 φ \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)=x−1;
2 2 2.若 x % p = 0 x\%p=0 x%p=0, φ ( x ⋅ p ) = φ ( x ) ⋅ p \varphi(x\cdot p)=\varphi(x)\cdot p φ(x⋅p)=φ(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) φ(x⋅p)=φ(x)⋅(p−1);
-
莫比乌斯函数 μ ( 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)=i∣x∑1
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=1∑nf(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) (f∗g)(n)=x∣n∑f(x)×g(xn)
既:
( f ∗ g ) ( n ) = ∑ x y = n f ( x ) × g ( y ) (f*g)(n)=\sum_{xy=n}f(x)\times g(y) (f∗g)(n)=xy=n∑f(x)×g(y)
-
狄利克雷卷积的性质:
1.交换律: f ∗ g = g ∗ f f*g=g*f f∗g=g∗f;
2.结合律: ( f ∗ g ) ∗ h = g ∗ ( f ∗ h ) (f*g)*h=g*(f*h) (f∗g)∗h=g∗(f∗h); ( a × f ) ∗ g = a × ( f ∗ g ) (a\times f)*g=a\times (f*g) (a×f)∗g=a×(f∗g);
3.分配律: ( f + g ) ∗ h = f ∗ h + g ∗ h (f+g)*h=f*h+g*h (f+g)∗h=f∗h+g∗h;
4.单位元: ϵ ∗ f = f ϵ*f=f ϵ∗f=f;其中 ϵ ( x ) = { 1 x = 1 0 x > 1 ϵ(x)=\begin{cases}1&x=1\\0&x>1\end{cases} ϵ(x)={10x=1x>1;
5.逆元: 对于每个 f ( 1 ) ≠ 0 f(1)\neq0 f(1)̸=0的函数,都存在一个函数 g g g使得 f ∗ g = ϵ f*g=ϵ f∗g=ϵ;
6.两个积性函数的狄利克雷卷积是积性函数。
  \ \ \ \ \ \, 如何求一个函数的逆:
ϵ
=
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}ϵ&=f*g\\ &=\sum_{x|n}f(x)\times g\left(\frac{n}{x}\right)\\ &=f(1)\times g(n)+\sum_{x|n,i\neq1}f(x)\times g\left(\frac{n}{x}\right)\\&=[n=1]\end{aligned}
ϵ=f∗g=x∣n∑f(x)×g(xn)=f(1)×g(n)+x∣n,i̸=1∑f(x)×g(xn)=[n=1]
 
\ \ \ \ \ \,
所以有:
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]−x∣n,i̸=1∑f(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]−x∣n,i̸=1∑f(x)×g(xn)⎠⎞
  \ \ \ \ \ \, 其中 μ \mu μ就是函数 1 1 1的逆,也就是说 μ ∗ 1 = ϵ \mu*1=ϵ μ∗1=ϵ
-莫比乌斯反演
  \ \ \ \ \ \, 莫比乌斯反演的本质就是利用性质 μ ∗ 1 = ϵ \mu*1=ϵ μ∗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=1n∑j=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=1∑nj=1∑m[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=1∑nj=1∑mϵ(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=1∑nj=1∑m(μ∗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=1∑nj=1∑md∣gcd(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=1∑nj=1∑md=1∑min(n,m)μ(d)[d∣gcd(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=1∑min(n,m)μ(d)i=1∑nj=1∑m[d∣gcd(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=1∑min(n,m)μ(d)i=1∑⌊dn⌋j=1∑⌊dm⌋1
∑ 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=1∑min(n,m)μ(d)i=1∑⌊dn⌋1j=1∑⌊dm⌋1
∑ 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=1∑min(n,m)μ(d)⌊dn⌋⌊dm⌋
  \ \ \ \ \ \, 例题
-
莫比乌斯反演经典例题回顾
P2522 [HAOI2011]Problem b(反演+容斥)
P2257 YY的GCD(反演)
P3312 [SDOI2014]数表(反演+离线+数据结构)
P3327 [SDOI2015]约数个数和(反演,数表的简化版)
P3455 [POI2007]ZAP-Queries(反演,裸的)
P1829 [国家集训队]Crash的数字表格 / JZPTAB(反演+欧拉筛,做法新奇)
P3768 简单的数学题(反演+杜教筛)
P4240 毒瘤之神的考验(反演+奇怪的分块,基本上很结论题了)
P1587 [NOI2016]循环之美(反演+杜教筛+数学知识+奇技淫巧,难题来了)
- 杜教筛
  \ \ \ \ \ \, 杜教筛是求积性函数的前缀和的筛法,复杂度可以达到小于线性的 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)。
  \ \ \ \ \ \, 对于一个积性函数 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}&\sum_{i=1}^n(f*g)(i)\\=&\sum_{i=1}^n\sum_{x\times y=i}f(x)\times g(y)\\=&\sum_{y=1}^ng(y)\sum_{x\times y\leq n}f(x)\\=&\sum_{y=1}^ng(y)\sum_{x=1}^{\left\lfloor\frac{n}{y}\right\rfloor}f(x)\\=&\sum_{y=1}^ng(y)S\left(\left\lfloor\frac{n}{y}\right\rfloor\right)\end{aligned} ====i=1∑n(f∗g)(i)i=1∑nx×y=i∑f(x)×g(y)y=1∑ng(y)x×y≤n∑f(x)y=1∑ng(y)x=1∑⌊yn⌋f(x)y=1∑ng(y)S(⌊yn⌋)
  \ \ \ \ \ \, 那么就有:
∑ 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=1∑n(f∗g)(i)=g(1)S(n)+y=2∑ng(y)S(⌊yn⌋)
  \ \ \ \ \ \, 既:
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=1∑n(f∗g)(i)−y=2∑ng(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(f∗g)(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=1∑n(f∗g)(i)−y=2∑ng(y)S(⌊yn⌋)
  \ \ \ \ \ \, 若是函数 ( f ∗ g ) (f*g) (f∗g)和 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)。
  \ \ \ \ \ \, 但若是我们先线性预处理出 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)
  \ \ \ \ \ \, 那么现在的问题是如何找到这个神奇的函数 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)=&\prod_{p|x,p\ \rm{is\ prime}}\frac{p^k(p-1)}{p}\\=&x\times \prod_{p|x,p\ \rm{is\ prime}}\left(1-\frac{1}{p}\right)\end{aligned} φ(x)==p∣x,p is prime∏ppk(p−1)x×p∣x,p is prime∏(1−p1)
( φ ∗ 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)=&\sum_{i|x}\varphi(i)\times 1\left(\frac{x}{i}\right)\\=&\sum_{i|x}\varphi(i)\\=&\sum_{i|x}i\times \prod_{p|i,p\ \rm{is\ prime}}\left(1-\frac{1}{p}\right)\end{aligned} (φ∗1)(x)===i∣x∑φ(i)×1(ix)i∣x∑φ(i)i∣x∑i×p∣i,p is prime∏(1−p1)
显然 ( φ ∗ 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 (f∗g)=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)=ϵ (f∗g)=ϵ,容易求和。
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),因为实际上他们是并列进行的。
-
贝尔级数
  \ \ \ \ \ \, 对于其他积性函数,为了找到满足条件的 g g g,我们引入贝尔级数,需要用到生成函数的姿势,但是实际上只需要记住下面的公式就够用了:
  \ \ \ \ \ \, 对于积性函数 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=0∑∞f(pi)xi
  \ \ \ \ \ \, 一个完全积性函数的贝尔级数为几何级数:
f p ( x ) = 1 1 − f ( p ) × x f_p(x)=\frac{1}{1-f(p)\times x} fp(x)=1−f(p)×x1
  \ \ \ \ \ \, 例如(“*”完全积性函数):
-
* ϵ p ( x ) = 1 ϵ_p(x)=1 ϵp(x)=1
-
* 1 p ( x ) = 1 1 − x 1_p(x)=\frac{1}{1-x} 1p(x)=1−x1
-
* i d p k ( x ) = 1 1 − p k ⋅ x id^k_p(x)=\frac{1}{1-p^k\cdot x} idpk(x)=1−pk⋅x1
-
μ p ( x ) = 1 − x \mu_p(x)=1-x μp(x)=1−x
-
σ p ( x ) = 1 ( 1 − x ) 2 \sigma_p(x)=\frac{1}{(1-x)^2} σp(x)=(1−x)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)=1−p⋅x1−x
  \ \ \ \ \ \, 有了这个东西,我们边可以把狄利克雷卷积化成一般卷积的形式:
( f ∗ g ) p ( x ) = f p ( x ) × g p ( x ) (f*g)_p(x)=f_p(x)\times g_p(x) (f∗g)p(x)=fp(x)×gp(x)
  \ \ \ \ \ \, 再带回去就可以得到我们想要的 g g g和 g ∗ f g*f g∗f,主观感觉非常复杂。
-