目录
-
-
- 前言
- 常见符号及其意义
- 数论函数
- 积性函数
-
- 1. 定义
- 2.常见的积性函数
- 3.利用线性筛预处理普通的积性函数
- 欧拉函数
- 莫比乌斯函数
-
- 1.定义
- 2.性质
- 3.莫比乌斯函数的代码实现
- 4.莫比乌斯函数与欧拉函数
- 莫比乌斯反演
-
- 狄利克雷卷积
-
- 1.定义
- 2.狄利克雷卷积的性质及其常见应用
- 3.狄利克雷卷积的代码实现
- 4.狄雷克雷卷积与其他函数的结合应用
-
- 推导莫比乌斯反演
- 推导 μ \mu μ和 ϕ \phi ϕ的关系
- 整除分块
-
- 1.概念思想
- 2.定理
- 3.代码实现
- 4.常见卷积
- 积性函数前缀和
-
- 1.概念思想
- 2.代码实现
- 3.常见的前缀和与g的选取
- 常用技巧
-
- TIPS
前言
此篇仅供个人学习总结使用
常见符号及其意义
- a ∣ b a\mid b a∣b表示 a a a是 b b b的约数
- ⌊ a b ⌋ \lfloor \frac{a}{b} \rfloor ⌊ba⌋,表示 a a a除以 b b b下取整
- ∏ i = 1 a p i \prod \limits ^a_{i=1}p_i i=1∏api表示 p 1 , p 2 , . . . p n p_1,p_2,...p_n p1,p2,...pn的乘积
- ∑ i = 1 n a i \sum \limits ^n_{i=1}a_i i=1∑nai表示 a 1 , a 2 , . . a n a_1,a_2,..a_n a1,a2,..an的和
- a ≡ b ( m o d p ) a \equiv b \pmod p a≡b(modp)表示 a a a与 b b b模 p p p的结果是相同的
- ∑ d ∣ n \sum\limits_{d\mid n} d∣n∑表示枚举 n n n的所有因子 d d d
- f × g ( x ) f \times g(x) f×g(x)表示 f f f函数与 g g g函数的狄利克雷卷积
- ∫ a b f ( x ) d x \int_a^b f(x)dx ∫abf(x)dx表示定积分
- f ( x ) = [ x = 1 ] f(x)=[x=1] f(x)=[x=1]表示 f ( x ) f(x) f(x)只有在 x = 1 x=1 x=1的时候才为 1 1 1,其他情况为 0 0 0
数论函数
数论函数是定义域为正整数的函数,又叫做算数函数
积性函数
1. 定义
对于一个数论函数 f ( n ) f(n) f(n),如果 a a a, b b b互质, f ( a b ) = f ( a ) f ( b ) f(ab)=f(a)f(b) f(ab)=f(a)f(b),那么 f ( n ) f(n) f(n)为积性函数.特殊的,如果对于任意的 a , b a,b a,b都有 f ( a b ) = f ( a ) f ( b ) f(ab)=f(a)f(b) f(ab)=f(a)f(b),那么 f ( n ) f(n) f(n)为完全积性函数
2.常见的积性函数
- 欧拉函数 ϕ ( n ) \phi(n) ϕ(n)
- 莫比乌斯函数 μ ( n ) \mu(n) μ(n)
- 幂函数(完全积性) f k ( n ) = n k f_k(n)=n^k fk(n)=nk
- 除数函数 σ x n = ∑ d ∣ n d x \sigma_xn=\sum\limits_{d\mid n}d^x σxn=d∣n∑dx,即所有因子的 x x x次幂之和.特殊的,当 x = 0 x=0 x=0的时候表示约数的个数,当 x = 1 x=1 x=1的时候表示约数之和
- 单位函数(完全积性) i d ( n ) = n id(n)=n id(n)=n
- 元函数(完全积性) e ( n ) = [ n = 1 ] e(n)=[n=1] e(n)=[n=1]
- 恒等函数(完全积性) I ( n ) = 1 I(n)=1 I(n)=1
3.利用线性筛预处理普通的积性函数
积性函数一般可以利用线性筛预处理,如莫比乌斯函数、欧拉函数等.
积性函数满足 f ( n ) = ∏ p i f ( p i k i ) f(n)=\prod_{p_i}f(p_i^{k_i}) f(n)=∏pif(piki),线性筛的时候一般分为两种情况:
- 新增加了一种质因子,直接用定义即可
- 最小质因子的幂次增加1,根据具体题目具体分析
假设 f f f函数为积性函数 f ( n ) = ∑ d ∣ n d f(n)=\sum_{d\mid n}d f(n)=∑d∣nd ( f (f (f为因子之和函数 ) ) ),线性筛的时候有两种情况
1.当 i i i不是 p p p的倍数,则 f ( i × p ) = f ( i ) × f ( p ) f(i\times p)=f(i)\times f(p) f(i×p)=f(i)×f(p)
2. i i i是 p p p的倍数,则考虑 f ( i × p ) f(i\times p) f(i×p)比 f ( i ) f(i) f(i)多了什么,实际上是某个 f ( p i k i ) f(p_i^{k_i}) f(piki)变成了 f ( p i k i + 1 ) f(p_i^{k_i+1}) f(piki+1),在这里可以先除以 f ( p i k i ) f(p_i^{k_i}) f(piki),再乘 f ( p i k i + 1 ) f(p_i^{k_i+1}) f(piki+1).
欧拉函数
- ϕ ( 1 ) = 1 \phi(1)=1 ϕ(1)=1
- ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p−1 ( p (p (p为素数 ) ) )
- ϕ ( p k ) = p k − p k − 1 = ( p − 1 ) × p k − 1 \phi(p^k)=p^k-p^{k-1}=(p-1)\times p^{k-1} ϕ(pk)=pk−pk−1=(p−1)×pk−1 ( p (p (p为素数 ) ) )
- 若 m , n m,n m,n互质,则有 ϕ ( n ∗ m ) = ϕ ( n ) ∗ ϕ ( m ) \phi(n*m)=\phi(n)*\phi(m) ϕ(n∗m)=ϕ(n)∗ϕ(m)
- 对于任意 n = p 1 k 1 ∗ p 2 k 2 ∗ . . . ∗ p r k r n=p_1^{k_1}*p_2^{k_2}*...*p_r^{k_r} n=p1k1∗p2k2∗...∗prkr (其中 p 1 , p 2 , . . . , p k p_1,p_2,...,p_k p1,p2,...,pk 为 n n n 的互不相同的质因子) 则有
φ ( n ) = ∏ i = 1 r φ ( p i k i ) = ∏ i = 1 r ( p i − 1 ) p i k i − 1 = ∏ i = 1 r ( 1 − 1 p i ) ∗ p i k i = n ∗ ∏ i = 1 r ( 1 − 1 p i ) \varphi(n)=\prod_{i=1}^{r}\varphi(p_i^{k_i})=\prod_{i=1}^{r}(p_i-1)p_i^{k_i-1}=\prod_{i=1}^{r}(1-\frac 1{p_i})*p_i^{k_i}=n*\prod_{i=1}^{r}(1-\frac 1{p_i}) φ(n)=∏i=1rφ(piki)=∏i=1r(pi−1)piki−1=∏i=1r(1−pi1)∗piki=n∗∏i=1r(1−pi1)
- 当 n > 1 n>1 n>1时,小于 n n n的数中,与 n n n互质的数的总和为 ϕ ( n ) ∗ n 2 \frac{\phi(n)*n}{2} 2ϕ(n)∗n
由此推导可得 ∑ i = 1 n i ⋅ [ g c d ( i , n ) = = 1 ] = n ⋅ ϕ ( n ) + [ n = = 1 ] 2 \sum\limits_{i=1}^ni\cdot[gcd(i,n)==1]=n\cdot \frac{\phi(n)+[n==1]}{2} i=1∑ni⋅[gcd(i,n)==1]=n⋅2ϕ(n)+[n==1]
- ∑ d ∣ n ϕ ( d ) = n \sum\limits_{d\mid n}\phi(d)=n d∣n∑ϕ(d)=n
- 若 n , a n,a n,a为正整数且 n , a n,a n,a互质,则
a ϕ ( n ) ≡ 1 ( m o d n ) a^{\phi(n)}\equiv 1\pmod n aϕ(n)≡1(modn),
a ϕ ( n ) − 1 ≡ a − 1 ( m o d n ) a^{\phi(n)-1}\equiv a^{-1}\pmod n aϕ(n)−1≡a−1(modn)
当 n > 1 , a , n n>1,a,n n>1,a,n互质, a b m o d n = a b m o d ϕ ( n ) m o d n a^b\mod n=a^{b\mod \phi(n)}\mod n abmodn=abmodϕ(n)modn
莫比乌斯函数
1.定义
莫比乌斯函数 μ ( m ) \mu(m) μ(m)
定义 μ ( 1 ) = 1 \mu(1)=1 μ(1)=1
当 x = p 1 p 2 . . p n x=p_1p_2..p_n x=p1p2..pn,且 p i p_i pi为不同的质数(即 x x x由若干幂次为 1 1 1的质数相乘), μ ( x ) = ( − 1 ) n \mu(x)=(-1)^n μ(x)=(−1)n,其他情况 μ ( x ) = 0 \mu(x)=0 μ(x)=0
2.性质
1. ∑ d ∣ n μ ( d ) = [ n = = 1 ] \sum_{d\mid n}\mu(d)=[n==1] ∑d∣nμ(d)=[n==1]
2.莫比乌斯函数为积性函数
3.莫比乌斯函数的代码实现
利用积性性质线性筛 O ( n ) O(n) O(n)处理
const int N=1e5+10;
int mu[N],p[N],pn=0;
bool flag[N];
void getmu(){
mu[1]=1;pn=0;
for(int i=2;i<N;i++){
if(!flag[i]) mu[i]=-1;
for(int j=1;j<=pn&&(ll)i*(ll)p[j]<N;j++){
flag[i*p[j]]=1;
if(!(i%p[j])){mu[i*p[j]]=0;break;}
else mu[i*p[j]]=-mu[i];
}
}
}
4.莫比乌斯函数与欧拉函数
应用卷积得:
ϕ ( n ) = ∑ d ∣ n μ ( d ) f ( n d ) = ∑ d ∣ n μ ( d ) n d \phi(n)=\sum\limits_{d\mid n}\mu(d)f(\frac{n}{d})=\sum\limits_{d\mid n}\mu(d)\frac{n}{d} ϕ(n)=d∣n∑μ(d)f(dn)=d∣n∑μ(d)dn
莫比乌斯反演
1.公式
若 f ( n ) = ∑ d ∣ n g ( d ) = ∑ d ∣ n g ( n d ) f(n)=\sum\limits_{d\mid n}g(d)=\sum\limits_{d\mid n}g(\frac{n}{d}) f(n)=d∣n∑g(d)=d∣n∑g(dn)
则 g ( n ) = ∑ d ∣ n f ( d ) μ ( n d ) = ∑ d ∣ n f ( n d ) μ ( d ) g(n)=\sum\limits_{d\mid n}f(d)\mu(\frac{n}{d})=\sum\limits_{d\mid n}f(\frac{n}{d})\mu(d) g(n)=d∣n∑f(d)μ(dn)=d∣n∑f(dn)μ(d)
以上二式互为充分必要条件
另一种形式:
f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum\limits_{n\mid d}g(d) f(n)=n∣d∑g(d)
g ( n ) = ∑ n ∣ d f ( d ) μ ( d n ) g(n)=\sum\limits_{n\mid d}f(d)\mu(\frac{d}{n}) g(n)=n∣d∑f(d)μ(nd)
狄利克雷卷积
1.定义
定义两个数论函数的狄利克雷卷积为:
( f × g ) ( n ) = ∑ d ∣ n f ( d ) × g ( n d ) (f\times g)(n)=\sum\limits_{d\mid n}f(d)\times g(\frac{n}{d}) (f×g)(n)=d∣n∑f(d)×g(dn)
也可以写成
( f × g ) ( n ) = ∑ a b = n f ( a ) × g ( b ) (f\times g)(n)=\sum\limits_{ab=n}f(a)\times g(b) (f×g)(n)=ab=n∑f(a)×g(b)
2.狄利克雷卷积的性质及其常见应用
- 交换律: f × g = ( g × f ) f\times g=(g\times f) f×g=(g×f)
- 结合律: ( f × g ) × h = f × ( g × h ) (f\times g)\times h=f\times (g\times h) (f×g)×h=f×(g×h)
- 分配率: ( f + g ) × h = f × h + g × h (f+g)\times h=f\times h+g\times h (f+g)×h=f×h+g×h
- 如果 f ( n ) , g ( n ) f(n),g(n) f(n),g(n)都为积性函数,那么他们的狄利克雷卷积也为积性函数
- 任何数论函数都与元函数的卷积等于函数自己,即 ( f × e ) ( n ) = ∑ d ∣ n f ( d ) × e ( n d ) = f ( n ) (f\times e)(n)=\sum\limits_{d\mid n}f(d)\times e(\frac{n}{d})=f(n) (f×e)(n)=d∣n∑f(d)×e(dn)=f(n)
- ( μ × I ) ( n ) = ∑ d ∣ n μ ( d ) × I ( n d ) = ∑ d ∣ n μ ( d ) = e ( n ) (\mu \times I)(n)=\sum\limits_{d\mid n}\mu(d)\times I(\frac{n}{d})=\sum\limits_{d\mid n}\mu(d)=e(n) (μ×I)(n)=d∣n∑μ(d)×I(dn)=d∣n∑μ(d)=e(n)
- ϕ × I ( n ) = ∑ d ∣ n ϕ ( d ) × I ( n d ) = ∑ d ∣ n ϕ ( d ) = n = i d ( n ) \phi\times I(n)=\sum\limits_{d\mid n}\phi(d)\times I(\frac{n}{d})=\sum\limits_{d\mid n}\phi(d)=n=id(n) ϕ×I(n)=d∣n∑ϕ(d)×I(dn)=d∣n∑ϕ(d)=n=id(n)
- ϕ = i d × μ \phi =id\times \mu ϕ=id×μ ( ( (第七条左右式同乘 μ \mu μ ) ) )
3.狄利克雷卷积的代码实现
复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
for (int i = 1; i <= n; i++) {
for (int j = 1; i*j <= n; j++) {
res[i * j] += f[i] * g[j];
}
}
4.狄雷克雷卷积与其他函数的结合应用
推导莫比乌斯反演
已知一个数论函数 f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum\limits_{d\mid n}g(d) f(n)=d∣n∑g(d),那么 f = g × I f=g\times I f=g×I ( ( ( g g g函数与恒等函数 I I I函数的卷积 ) ) ),根据狄利克雷卷积的性质,在两边同乘 μ \mu μ,得到:
f × μ = g × I × μ = g × e = g f\times \mu=g\times I\times \mu=g\times e=g f×μ=g×I×μ=g×e=g
所以
g ( n ) = ∑ d ∣ n f ( d ) μ ( n d ) g(n)=\sum\limits_{d\mid n}f(d)\mu(\frac{n}{d}) g(n)=d∣n∑f(d)μ(dn)
可见狄利克雷卷积对原问题进行了更高层次的抽象,使问题变得简单
推导 μ \mu μ和 ϕ \phi ϕ的关系
已知欧拉函数一性质:
n = ∑ d ∣ n ϕ ( d ) n=\sum\limits_{d\mid n}\phi(d) n=d∣n∑ϕ(d)
令 f ( n ) = n , g ( n ) = ϕ ( n ) f(n)=n,g(n)=\phi(n) f(n)=n,g(n)=ϕ(n),反演得:
ϕ ( n ) = ∑ d ∣ n μ ( d ) f ( n d ) = ∑ d ∣ n μ ( d ) n d \phi(n)=\sum\limits_{d\mid n}\mu(d)f(\frac{n}{d})=\sum\limits_{d\mid n}\mu(d)\frac{n}{d} ϕ(n)=d∣n∑μ(d)f(dn)=d∣n∑μ(d)dn
整除分块
1.概念思想
考虑最简单的情况,对于 ∑ i = 1 n ⌊ n i ⌋ \sum\limits_{i=1}^n{\lfloor\frac{n}{i}\rfloor} i=1∑n⌊in⌋
通过一些性质的分析可发现, ⌊ n i ⌋ \lfloor\frac{n}{i}\rfloor ⌊in⌋是由若干段值相等的区间构成的,假设该区间左边界为 L L L,右边界为 R R R,那么对于区间内的每个值,往往可以用基本相同的式子得到答案,乘上与区间长度有关的系数即可,这样一段取值序列 [ 1 , n ] [1,n] [1,n]被分成 n \sqrt n n 块,复杂度 O ( n ) O(\sqrt n) O(n )
在最简单的整除分块中,对于已知的 L L L,对应的 R = ⌊ N ⌊ N L ⌋ ⌋ R=\lfloor\frac{N}{\lfloor\frac{N}{L}\rfloor}\rfloor R=⌊⌊LN⌋N⌋
2.定理
- ∑ i = 1 n ⌊ n i ⌋ = 2 ∑ i = 1 ⌊ n ⌋ ⌊ n i ⌋ − ( ⌊ n ⌋ ) 2 \sum\limits_{i=1}^n\lfloor\frac{n}{i}\rfloor=2\sum\limits_{i=1}^{\lfloor\sqrt{n}\rfloor}\lfloor\frac{n}{i}\rfloor-(\lfloor\sqrt{n}\rfloor)^2 i=1∑n⌊in⌋=2i=1∑⌊n ⌋⌊in⌋−(⌊n ⌋)2
- ∑ i = 1 n ⌊ n i ⌋ = ∑ d = 1 n σ 0 ( d ) \sum\limits_{i=1}^n{\lfloor\frac{n}{i}\rfloor}=\sum\limits_{d=1}^n{\sigma_0(d)} i=1∑n⌊in⌋=d=1∑nσ0(d) ( ( ( σ 0 ( d ) \sigma_0(d) σ0(d) 表示 d d d 的因子个数 ) ) )
- ∑ i = 1 n ⌊ n i ⌋ = ∑ i = 1 n ∑ j = 1 n [ i ⋅ j ≤ n ] \sum\limits_{i=1}^n{\lfloor\frac{n}{i}\rfloor}=\sum\limits_{i=1}^n\sum\limits_{j=1}^n[i\cdot j\leq n] i=1∑n⌊in⌋=i=1∑nj=1∑n[i⋅j≤n]
3.代码实现
假设求 ∑ i = 1 n ⌊ n i ⌋ \sum\limits_{i=1}^n{\lfloor\frac{n}{i}\rfloor} i=1∑n⌊in⌋,这里给出最基本的写法
ll get(ll n){
ll ans=0;
for(ll L=1,R;L<=n;L=R+1){
R=n/(n/L);
ans=(ans+(ll)(R-L+1)*(ll)(n/L)%M)%M;
}
return ans;
}
4.常见卷积
- ( μ × I ) ( n ) = ∑ d ∣ n μ ( d ) = e ( n ) = [ n = = 1 ] (\mu\times I)(n)=\sum\limits_{d\mid n}\mu(d)=e(n)=[n==1] (μ×I)(n)=d∣n∑μ(d)=e(n)=[n==1]
- ( ϕ × I ) ( n ) = ∑ d ∣ n ϕ ( d ) = n = i d ( n ) (\phi\times I)(n)=\sum\limits_{d\mid n}\phi(d)=n=id(n) (ϕ×I)(n)=d∣n∑ϕ(d)=n=id(n)
- ϕ = i d × μ \phi=id\times \mu ϕ=id×μ
- ( f × e ) ( n ) = f ( n ) (f\times e)(n)=f(n) (f×e)(n)=f(n)
积性函数前缀和
1.概念思想
对于积性函数f(n),求
S ( n ) = ∑ i = 1 n f ( i ) ( 1 ≤ n ≤ 1 0 1 0 ) S(n)=\sum\limits_{i=1}^nf(i)(1\leq n\leq 10^10) S(n)=i=1∑nf(i)(1≤n≤1010)
以上问题可用杜教筛解决
为解决此问题,先尝试计算 g × f g\times f g×f的前缀和:
∑ i = 1 n ( f × g ) ( i ) = ∑ i = 1 n ∑ d ∣ i g ( d ) f ( i d ) = ∑ d = 1 n g ( d ) ∑ d ∣ i f ( i d ) = ∑ d = 1 n g ( d ) ∑ i = 1 ⌊ n d ⌋ f ( i ) = ∑ i = 1 n g ( i ) S ( ⌊ n i ⌋ ) \sum\limits_{i=1}^n(f\times g)(i)=\sum\limits_{i=1}^n\sum\limits_{d\mid i}g(d)f(\frac{i}{d})=\sum\limits_{d=1}^ng(d)\sum\limits_{d\mid i}f(\frac{i}{d})=\sum\limits_{d=1}^ng(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}f(i)=\sum\limits_{i=1}^ng(i)S(\lfloor\frac{n}{i}\rfloor) i=1∑n(f×g)(i)=i=1∑nd∣i∑g(d)f(di)=d=1∑ng(d)d∣i∑f(di)=d=1∑ng(d)i=1∑⌊dn⌋f(i)=i=1∑ng(i)S(⌊in⌋)
得到:
g ( 1 ) S ( n ) = ∑ i = 1 n ( f × g ) ( i ) − ∑ i = 2 n g ( i ) S ( ⌊ n i ⌋ ) g(1)S(n)=\sum\limits_{i=1}^n(f\times g)(i)-\sum\limits_{i=2}^ng(i)S(\lfloor\frac{n}{i}\rfloor) g(1)S(n)=i=1∑n(f×g)(i)−i=2∑ng(i)S(⌊in⌋)
S ( n ) S(n) S(n)是要求的值, S ( ⌊ n i ⌋ ) S(\lfloor\frac{n}{i}\rfloor) S(⌊in⌋)可以递归解决,关键要找到合适的 g g g
用线性筛等预处理出 S ( i ) S(i) S(i)前 n 2 3 n^{\frac{2}{3}} n32项,剩余的项采用记忆化搜索(用hash或者map记录值)
假设查询q次前缀和,总复杂度为 O ( q + n 2 3 ) O(q+n^{\frac{2}{3}}) O(q+n32),花在查询上的复杂度始终是均摊 O ( n 2 3 ) O(n^{\frac{2}{3}}) O(n32)
2.代码实现
这里以求 μ \mu μ的前缀和为例
假设题目 n ≤ 1 e 9 n\leq 1e9 n≤1e9
取 I I I与 μ \mu μ卷积,得
I ( 1 ) S ( n ) = ∑ i = 1 n ( μ × I ) ( i ) − ∑ i = 2 n I ( i ) S ( ⌊ n i ⌋ ) I(1)S(n)=\sum\limits_{i=1}^n(\mu\times I)(i)-\sum\limits_{i=2}^nI(i)S(\lfloor\frac{n}{i}\rfloor) I(1)S(n)=i=1∑n(μ×I)(i)−i=2∑nI(i)S(⌊in⌋)
即
S ( n ) = 1 − ∑ i = 2 n S ( ⌊ n i ⌋ ) S(n)=1-\sum\limits_{i=2}^nS(\lfloor\frac{n}{i}\rfloor) S(n)=1−i=2∑nS(⌊in⌋)
const int N=1e6+5;
const ll M=1e9+7;
#define un_mp unordered_map
un_mp<ll,ll> q;
int mu[N],p[N],pn=0;bool flag[N];
void pre(){
mu[1]=1;
for(int i=2;i<N;i++){
if(!flag[i]) p[++pn]=i,mu[i]=(-1+M)%M;;
for(int j=1;j<=pn&&(ll)i*(ll)p[j]<N;j++){
flag[i*p[j]]=1;
if(!(i%p[j])){mu[i*p[j]]=0;break;}
else mu[i*p[j]]=(M-mu[i])%M;
}
}
for(int i=2;i<N;i++) mu[i]=(mu[i]+mu[i-1])%M;
}
ll solve(ll n){
if(n<N) return mu[n];
if(q[n]) return q[n];
ll res=1ll;
for(ll L=2,R;L<=n;L=R+1){
R=(n/(n/L));
res=(res+M-(ll)(R-L+1)%M*solve(n/L)%M)%M;
}
return q[n]=res;
}
3.常见的前缀和与g的选取
- 对于 ∑ i = 1 n μ ( i ) \sum\limits_{i=1}^n\mu(i) i=1∑nμ(i),选取 I I I: S ( n ) = 1 − ∑ i = 2 n S ( ⌊ n i ⌋ ) S(n)=1-\sum\limits_{i=2}^nS(\lfloor\frac{n}{i}\rfloor) S(n)=1−i=2∑nS(⌊in⌋)
- 对于 ∑ i = 1 n ϕ ( i ) \sum\limits_{i=1}^n\phi(i) i=1∑nϕ(i),选取 I I I: S ( n ) = n ∗ ( n + 1 ) / 2 − ∑ i = 2 n S ( ⌊ n i ⌋ ) S(n)=n*(n+1)/2-\sum\limits_{i=2}^nS(\lfloor\frac{n}{i}\rfloor) S(n)=n∗(n+1)/2−i=2∑nS(⌊in⌋)
- ϕ = i d × μ \phi=id\times \mu ϕ=id×μ:变成求 ϕ \phi ϕ的前缀和
常用技巧
1.推导方法
- 交换枚举的先后顺序
- 交换约数与倍数
- 对于 d ∣ n d\mid n d∣n,往往可以转而枚举 d d d和 n n n对 d d d的倍数 ⌊ n d ⌋ \lfloor\frac{n}{d}\rfloor ⌊dn⌋,此时要注意原有数值所代表的的意义及其表示在操作后的变化,分清系数的关系
- 替换和式中的标号
- 用 μ \mu μ替换形似 [ g = = 1 ] [g==1] [g==1]的式子
- 对于 [ g = = d ] [g==d] [g==d]的式子,可以将 d d d提出,然后有选择地进行步骤5
- 若式子里有 g c d ( i , j ) gcd(i,j) gcd(i,j)的形式,可以枚举 g c d ( i , j ) gcd(i,j) gcd(i,j)的值,即枚举 d d d后转化为 [ g c d ( i , j ) = = d ] [gcd(i,j)==d] [gcd(i,j)==d]的形式,根据题目有选择地进行步骤6
- 常见的卷积形式见上文
2.计算优化
- 对于 ∑ i = 1 n ⌊ n i ⌋ \sum\limits_{i=1}^n\lfloor\frac{n}{i}\rfloor i=1∑n⌊in⌋,可以整除分块加速计算
3.其他定理
- ∑ i = 1 n i = n ( n + 1 ) 2 \sum\limits_{i=1}^ni=\frac{n(n+1)}{2} i=1∑ni=2n(n+1)
- ∑ i = 1 n i 2 = n ( n + 1 ) ( 2 n + 1 ) 6 \sum\limits_{i=1}^ni^2=\frac{n(n+1)(2n+1)}{6} i=1∑ni2=6n(n+1)(2n+1)
- ∑ i = 1 n i 3 = [ n ( n + 1 ) 2 ] 2 \sum\limits_{i=1}^ni^3=[\frac{n(n+1)}{2}]^2 i=1∑ni3=[2n(n+1)]2
- 1 + 3 + 5 + . . . + ( 2 n − 1 ) = n 2 1+3+5+...+(2n-1)=n^2 1+3+5+...+(2n−1)=n2
TIPS
- 整除分块时注意int和long long在效率上的差别
- μ \mu μ可能为负,在取模题中注意对其取模
- 注意不要爆int,不要爆int,不要爆int
- 对于某些毒瘤题目,酌情使用unsigned long long
- 注意 ∑ i = 1 n \sum\limits_{i=1}^n i=1∑n与 ∑ i = 1 n i \sum\limits_{i=1}^ni i=1∑ni的区别