省选数论总结
目录#
前言#
此篇仅供个人学习总结使用
常见符号及其意义#
- 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;//mu,质数,质数个数
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;//1e9的2/3次幂为1e6
const ll M=1e9+7;//题目的模数
#define un_mp unordered_map
un_mp<ll,ll> q;//unordered_map实现记忆化搜索
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];//若已预处理,直接return值
if(q[n]) return q[n];//若已记忆化,直接return值
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的区别
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通