前置技能
约定
1.
g
c
d
(
a
,
b
)
=
(
a
,
b
)
gcd(a,b)=(a,b)
gcd(a,b)=(a,b)
2.
[
a
]
=
{
1
,
a
=
t
r
u
e
0
,
a
=
f
a
l
s
e
[a]=\begin{cases}1,a=true\\0,a=false\end{cases}
[a]={1,a=true0,a=false
数论分块
已知 n , k n,k n,k,则暴力地求 S = ∑ i = 1 n ⌊ n i ⌋ \begin{aligned}S=\sum\limits_{i=1}^{^{^{^{^{}}}}n^{^{^{^{}}}}}\Big\lfloor\dfrac ni\Big\rfloor\end{aligned} S=i=1∑n⌊in⌋ 需要 O ( n ) O(n) O(n) 的时间。我们把表 ( k = 10 ) (k=10) (k=10) 列出来看看。
i i i | 1 1 1 | 2 2 2 | 3 3 3 | 4 4 4 | 5 5 5 | 6 6 6 | 7 7 7 | 8 8 8 | 9 9 9 | 10 10 10 |
---|---|---|---|---|---|---|---|---|---|---|
n i \dfrac{n}{i} in | 10 10 10 | 5 5 5 | 3 3 3 | 2 2 2 | 2 2 2 | 1 1 1 | 1 1 1 | 1 1 1 | 1 1 1 | 1 1 1 |
其实最多只有
2
n
2\sqrt n
2n 种取值。
设当前枚举的下标为
i
i
i,当前位置的取值为
⌊
n
i
⌋
\Big\lfloor\dfrac ni\Big\rfloor
⌊in⌋,则相同取值的最右端点下标为
⌊
n
⌊
n
i
⌋
⌋
\Bigg\lfloor\dfrac n{\big\lfloor\frac ni \big\rfloor}\Bigg\rfloor
⌊⌊in⌋n⌋。
因而可以写出如下代码:
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);
ans+=(r-l+1)*(n/l);
}
时间复杂度 O ( n ) O(\sqrt n) O(n)
变形1 已知
n
,
k
n,k
n,k,求
S
=
∑
i
=
1
n
⌊
k
i
⌋
\begin{aligned}S=\sum\limits_{i=1}^{^{^{^{}}}n^{^{^{}}}}\Big\lfloor\dfrac ki\Big\rfloor\end{aligned}
S=i=1∑n⌊ik⌋
解: 计算右端点时特判一下是否越界即可。
int len=min(n,k);
for(int l=1,r;l<=len;l=r+1){
r=min(n,k/(k/l));
if(r>n) r=n;//防止越过n
ans+=(long long)(k/l)*(r-l+1);
}
变形2 已知
n
,
a
,
b
n,a,b
n,a,b,求
S
=
∑
i
=
1
n
⌊
a
i
⌋
⌊
b
i
⌋
\begin{aligned}S=\sum_{i=1}^{^{^{^{}}}n^{^{^{}}}}\Big\lfloor\dfrac a{i}\Big\rfloor\Big\lfloor\dfrac b{i}\Big\rfloor\end{aligned}
S=i=1∑n⌊ia⌋⌊ib⌋
解: 分段的时候分得细一些即可,这对时间复杂度的影响是常数级别的。
int len=min(n,min(a,b));
for(int l=1,r;l<=len;l=r+1){
r=min(a/(a/l),b/(b/l));
if(r>n) r=n;
ans+=(r-l+1)*(a/l)*(b/l);
}
变形3 已知
n
,
a
,
b
,
k
n,a,b,k
n,a,b,k,求
S
=
∑
i
=
1
n
⌊
a
i
k
⌋
⌊
b
i
k
⌋
\begin{aligned}S=\sum_{i=1}^{^{^{^{}}}n^{^{^{}}}}\Big\lfloor\dfrac a{ik}\Big\rfloor\Big\lfloor\dfrac b{ik}\Big\rfloor\end{aligned}
S=i=1∑n⌊ika⌋⌊ikb⌋
解: 首先,我们发现
∑
\sum
∑ 的上界可以调紧一些。
S
=
∑
i
=
1
m
i
n
(
n
,
a
,
b
)
⌊
a
i
k
⌋
⌊
b
i
k
⌋
S=\sum_{i=1}^{min(n,a,b)}\Big\lfloor\dfrac a{ik}\Big\rfloor\Big\lfloor\dfrac b{ik}\Big\rfloor
S=i=1∑min(n,a,b)⌊ika⌋⌊ikb⌋
由于
⌊
a
i
k
⌋
⌊
b
i
k
⌋
=
⌊
⌊
a
k
⌋
i
⌋
⌊
⌊
b
k
⌋
i
⌋
\Big\lfloor\dfrac a{ik}\Big\rfloor\Big\lfloor\dfrac b{ik}\Big\rfloor=\Bigg\lfloor\dfrac {\Big\lfloor \dfrac{a}k\Big\rfloor}{i}\Bigg\rfloor\Bigg\lfloor\dfrac {\Big\lfloor \dfrac{b}k\Big\rfloor}{i}\Bigg\rfloor
⌊ika⌋⌊ikb⌋=⌊i⌊ka⌋⌋⌊i⌊kb⌋⌋,因此把
k
k
k 提出来:
S
=
∑
i
=
1
m
i
n
(
n
,
a
k
,
b
k
)
⌊
⌊
a
k
⌋
i
⌋
⌊
⌊
b
k
⌋
i
⌋
S=\sum_{i=1}^{\small min(n,\normalsize\frac ak\small,\normalsize\frac bk\small)}\Bigg\lfloor\dfrac {\Big\lfloor \dfrac{a}k\Big\rfloor}{i}\Bigg\rfloor\Bigg\lfloor\dfrac {\Big\lfloor \dfrac{b}k\Big\rfloor}{i}\Bigg\rfloor
S=i=1∑min(n,ka,kb)⌊i⌊ka⌋⌋⌊i⌊kb⌋⌋
这样就可以了。
int len=min(n,min(a/=k,b/=k));
for(int l=1,r;l<=len;l=r+1){
r=min(a/(a/l),b/(b/l));
if(r>n) r=n;
ans+=(r-l+1)*(a/l)*(b/l);
}
变形4 已知
n
n
n,求
S
=
∑
i
=
1
n
i
×
⌊
n
i
⌋
\begin{aligned}S=\sum\limits_{i=1}^{^{^{^{}}}n^{^{^{}}}}i\times \Big\lfloor \dfrac ni\Big\rfloor\end{aligned}
S=i=1∑ni×⌊in⌋
解: 乘法分配律即可。
for(int l=1,r;l<=n;l=r+1){
r=n/(n/l);
ans+=(l+r)*(r-l+1)*(n/l)/2;
}
积性函数
例子
- 常函数 1 ( n ) = 1 1(n)=1 1(n)=1
- 单位元 ϵ ( n ) = { 1 , n = 1 0 , n ≠ 1 \epsilon(n)=\begin{cases}1,n=1\\0,n\not=1\end{cases} ϵ(n)={1,n=10,n=1
- 约数个数函数 d ( n ) = ∑ x ∣ n 1 \begin{aligned}d(n)=\sum\limits^{^{^{^{^{^{}}}}}}_{x|n}1\end{aligned} d(n)=x∣n∑1
- 设 p p p 的唯一分解为 p = ∏ p i k i ( ∀ i ≠ j , p i ≠ p j ) \begin{aligned}p=\prod^{} p_i^{k_i}(\forall i\not=j,p_i\not=p_j)\end{aligned} p=∏piki(∀i=j,pi=pj),则 d ( p ) = ∏ ( k i + 1 ) \begin{aligned}d(p)=\prod ^{}(k_i+1)\end{aligned} d(p)=∏(ki+1)。(积性证明)
- 约数和函数 σ ( n ) = ∑ x ∣ n x \begin{aligned}σ(n)=\sum^{^{^{^{^{}}}}}_{x|n}x\end{aligned} σ(n)=x∣n∑x
- 约数k次幂函数 σ k ( n ) = ∑ x ∣ n x k \begin{aligned}σ_k(n)=\sum^{^{^{^{^{}}}}}_{x|n}x^k\end{aligned} σk(n)=x∣n∑xk
- 欧拉函数 φ ( n ) = ∑ 1 n [ ( i , n ) = 1 ] \begin{aligned}\varphi(n)=\sum_{1}^{^{^{}}n^{^{}}}[(i,n)=1]\end{aligned} φ(n)=1∑n[(i,n)=1]
- 莫比乌斯函数 μ ( x ) = { 1 , x = 1 ( − 1 ) k , x = p 1 p 2 . . . p k , ∀ p i ≠ p j ( p i 为 x 的唯一分解 ) 0 , o t h e r s \mu(x)=\begin{cases}1,& x=1\\(-1)^{k},& x=p_1p_2...p_k,\forall\ p_i\not=p_j( p_i 为 x 的唯一分解)\\0,& others\end{cases} μ(x)=⎩ ⎨ ⎧1,(−1)k,0,x=1x=p1p2...pk,∀ pi=pj(pi为x的唯一分解)others
- i d ( n ) = n id(n)=n id(n)=n
性质
如果
f
f
f 和
g
g
g 是积性函数,则下列函数也是积性函数。
1.
h
(
x
)
=
f
(
x
p
)
h(x)=f(x^p)
h(x)=f(xp)
2.
h
(
x
)
=
f
p
(
x
)
h(x)=f^p(x)
h(x)=fp(x)
3.
h
(
x
)
=
f
(
x
)
g
(
x
)
h(x)=f(x)g(x)
h(x)=f(x)g(x)
4.
h
(
x
)
=
∑
d
∣
x
f
(
d
)
g
(
x
d
)
h(x)=\sum\limits_{d|x}f(d)g(\dfrac xd)
h(x)=d∣x∑f(d)g(dx)
部分积性证明
欧拉函数
先说一下,网上那些根据通式证明的大多都是错的,因为通式需要积性证明。
结论 若
(
n
,
m
)
=
1
(n,m)=1
(n,m)=1,则
φ
(
n
m
)
=
φ
(
n
)
φ
(
m
)
\varphi(nm)=\varphi(n)\varphi(m)
φ(nm)=φ(n)φ(m)
证明 构造矩阵
[
1
2
⋯
r
⋯
m
m
+
1
m
+
2
⋯
m
+
r
⋯
2
m
2
m
+
1
2
m
+
2
⋯
2
m
+
r
⋯
3
m
⋮
⋮
⋱
⋮
⋱
⋮
(
n
−
1
)
m
+
1
(
n
−
1
)
m
+
2
⋯
(
n
−
1
)
m
+
r
⋯
n
m
]
\begin{bmatrix} &1&2&\cdots&r&\cdots&m\\ &m+1&m+2&\cdots&m+r&\cdots&2m\\ &2m+1&2m+2&\cdots&2m+r&\cdots&3m\\ &\vdots&\vdots&\ddots&\vdots&\ddots&\vdots\\ &(n-1)m+1&(n-1)m+2&\cdots&(n-1)m+r&\cdots&nm \end{bmatrix}
⎣
⎡1m+12m+1⋮(n−1)m+12m+22m+2⋮(n−1)m+2⋯⋯⋯⋱⋯rm+r2m+r⋮(n−1)m+r⋯⋯⋯⋱⋯m2m3m⋮nm⎦
⎤
可以发现,
φ
(
n
m
)
\varphi(nm)
φ(nm) 指的是矩阵中与
n
m
nm
nm 互质的数的个数。
由于
(
n
,
m
)
=
1
(n,m)=1
(n,m)=1,因此与
n
m
nm
nm 互质的数相当于与
n
n
n 互质且和
m
m
m 互质的数的个数。
∵
(
k
m
+
r
,
m
)
=
(
r
,
m
)
\because (km+r,m)=(r, m)
∵(km+r,m)=(r,m)
∴
\therefore
∴ 每一列的
n
n
n 个元素同时与
m
m
m 互素当且仅当
(
r
,
m
)
=
1
(r,m)=1
(r,m)=1。
∴
\therefore
∴ 与 m互素的列共有
φ
(
m
)
\varphi(m)
φ(m) 列
设
r
r
r 满足
(
r
,
m
)
=
1
(r,m)=1
(r,m)=1,则第
r
r
r 列的元素为
r
,
m
+
r
,
⋯
,
(
n
−
1
)
m
+
r
r,m+r,\cdots,(n-1)m+r
r,m+r,⋯,(n−1)m+r
用反证法可以得出:它们模
n
n
n 的余数互不相同
证明 设存在
i
i
i 和
j
j
j 满足
i
≢
j
(
m
o
d
n
)
i\not\equiv j\pmod n
i≡j(modn) 且
i
m
+
r
≡
j
m
+
r
(
m
o
d
n
)
im+r\equiv jm+r\pmod n
im+r≡jm+r(modn)
则根据同余的性质得
i
m
≡
j
m
(
m
o
d
n
)
im\equiv jm\pmod n
im≡jm(modn)
又
∵
(
n
,
m
)
=
1
\because (n,m)=1
∵(n,m)=1
∴
\therefore
∴ 存在
m
−
1
m^{-1}
m−1,满足
m
×
m
−
1
≡
1
(
m
o
d
n
)
m\times m^{-1}\equiv1\pmod n
m×m−1≡1(modn)
∴
i
≡
j
(
m
o
d
n
)
\therefore i\equiv j\pmod n
∴i≡j(modn)
与假设矛盾。得证。
\qquad\,\,\,
因此
r
,
m
+
r
,
⋯
,
(
n
−
1
)
m
+
r
r,m+r,\cdots,(n-1)m+r
r,m+r,⋯,(n−1)m+r 这
n
n
n 个数取遍了
0
0
0 到
n
−
1
n-1
n−1,其中和
n
n
n 互质的数的个数为
φ
(
n
)
\varphi(n)
φ(n)。综上所述,共有
φ
(
m
)
\varphi(m)
φ(m) 列,每列有
φ
(
n
)
\varphi(n)
φ(n) 个数,因此总共有
φ
(
n
)
×
φ
(
m
)
\varphi(n)\times\varphi(m)
φ(n)×φ(m) 个。
故
φ
(
n
m
)
=
φ
(
n
)
φ
(
m
)
\varphi(nm)=\varphi(n)\varphi(m)
φ(nm)=φ(n)φ(m)
莫比乌斯函数
结论 若
(
n
,
m
)
=
1
(n,m)=1
(n,m)=1 则
μ
(
n
m
)
=
μ
(
n
)
μ
(
m
)
\mu(nm)=\mu(n)\mu(m)
μ(nm)=μ(n)μ(m)。
证明 其实根据定义就可以很简单地得到。
1. 当
n
n
n 存在某个大于
1
1
1 的因子为完全平方数时,
μ
(
n
)
=
0
\mu(n)=0
μ(n)=0
n
m
nm
nm 的因子必然也有这个完全平方数,故
μ
(
n
m
)
=
μ
(
n
)
μ
(
m
)
=
0
\mu(nm)=\mu(n)\mu(m)=0
μ(nm)=μ(n)μ(m)=0
2. 当
n
n
n 不存在大于
1
1
1 的因子为完全平方数时
∵
(
n
,
m
)
=
1
\because (n,m)=1
∵(n,m)=1,即
n
n
n 和
m
m
m 不含有相同的因子
∴
\therefore
∴
n
m
nm
nm 的质因子个数等于
n
n
n 的质因子个数加
m
m
m 的质因子个数
又 奇数
+
+
+奇数
=
=
=偶数,奇数
+
+
+偶数
=
=
=奇数,偶数
+
+
+偶数
=
=
=偶数
对应
(
−
1
)
×
(
−
1
)
=
1
,
1
×
(
−
1
)
=
−
1
,
1
×
1
=
1
(-1)\times(-1)=1,1\times(-1)=-1,1\times1=1
(−1)×(−1)=1,1×(−1)=−1,1×1=1
∴
μ
(
n
m
)
=
μ
(
n
)
μ
(
m
)
\therefore \mu(nm)=\mu(n)\mu(m)
∴μ(nm)=μ(n)μ(m),得证。
筛积性函数
欧拉函数
欧拉函数有下面的性质。
性质1 若
m
∈
p
r
i
m
e
,
n
≡
0
(
m
o
d
m
)
m\in prime,n≡0 \pmod m
m∈prime,n≡0(modm) 则
φ
(
n
×
m
)
=
φ
(
n
)
×
m
\varphi(n\times m)=\varphi(n)\times m
φ(n×m)=φ(n)×m
证明 构造矩阵
[
1
2
⋯
r
⋯
n
n
+
1
n
+
2
⋯
n
+
r
⋯
2
n
2
n
+
1
2
n
+
2
⋯
2
n
+
r
⋯
3
n
⋮
⋮
⋱
⋮
⋱
⋮
(
m
−
1
)
n
+
1
(
m
−
1
)
n
+
2
⋯
(
m
−
1
)
n
+
r
⋯
m
n
]
\begin{bmatrix} &1&2&\cdots&r&\cdots&n\\ &n+1&n+2&\cdots&n+r&\cdots&2n\\ &2n+1&2n+2&\cdots&2n+r&\cdots&3n\\ &\vdots&\vdots&\ddots&\vdots&\ddots&\vdots\\ &(m-1)n+1&(m-1)n+2&\cdots&(m-1)n+r&\cdots&mn\\ \end{bmatrix}
⎣
⎡1n+12n+1⋮(m−1)n+12n+22n+2⋮(m−1)n+2⋯⋯⋯⋱⋯rn+r2n+r⋮(m−1)n+r⋯⋯⋯⋱⋯n2n3n⋮mn⎦
⎤ 由于
(
n
,
m
)
=
1
(n,m)=1
(n,m)=1,因此与
n
m
nm
nm 互质的数相当于与
n
n
n 互质且与
m
m
m 互质的数的个数。又由于
(
k
n
+
r
,
n
)
=
(
r
,
n
)
(kn+r,n)=(r, n)
(kn+r,n)=(r,n) 因此每一列的
m
m
m 个元素同时与
n
n
n 互素当且仅当
(
r
,
n
)
=
1
(r,n)=1
(r,n)=1。因此共有
φ
(
n
)
\varphi(n)
φ(n) 列满足,其余列均不与
n
n
n 互质。
\,
其中满足
(
r
,
n
)
=
1
(r,n)=1
(r,n)=1 的第
r
r
r 列第
k
k
k 行的数为
k
n
+
r
kn+r
kn+r 又
n
≡
0
(
m
o
d
m
)
n≡0\pmod m
n≡0(modm) 因此
k
n
+
r
≡
0
×
k
+
r
≡
r
(
m
o
d
m
)
kn+r≡0\times k+r≡r\pmod m
kn+r≡0×k+r≡r(modm)因此
(
k
n
+
r
,
m
)
=
(
r
,
m
)
(kn+r,m)=(r,m)
(kn+r,m)=(r,m)又
m
∣
n
,
(
r
,
n
)
=
1
m|n,(r,n)=1
m∣n,(r,n)=1因此
(
r
,
m
)
=
1
(r,m)=1
(r,m)=1 故
(
k
n
+
r
,
m
)
=
1
(kn+r,m)=1
(kn+r,m)=1
∴
\therefore
∴ 满足
(
r
,
n
)
=
1
(r,n)=1
(r,n)=1 的第
r
r
r 列的所有
m
m
m 个数均与
n
n
n 互质。
∴
φ
(
n
×
m
)
=
φ
(
n
)
×
m
\therefore \varphi(n\times m)=\varphi(n)\times m
∴φ(n×m)=φ(n)×m
性质2 若
p
∈
p
r
i
m
e
,
i
≢
0
(
m
o
d
p
)
p\in prime,i\not≡0 \pmod p
p∈prime,i≡0(modp) 则
φ
(
i
×
p
)
=
φ
(
i
)
×
(
p
−
1
)
\varphi(i\times p)=\varphi(i)\times (p-1)
φ(i×p)=φ(i)×(p−1)。
证明
∵
\because
∵ 欧拉函数是积性函数,
(
i
,
p
)
=
1
(i,p)=1
(i,p)=1
∴
φ
(
i
×
p
)
=
φ
(
i
)
×
φ
(
p
)
\therefore \varphi(i\times p)=\varphi(i)\times\varphi(p)
∴φ(i×p)=φ(i)×φ(p)
又
p
∈
p
r
i
m
e
p\in prime
p∈prime
∴
φ
(
p
)
=
p
−
1
\therefore \varphi(p)=p-1
∴φ(p)=p−1
∴
φ
(
i
×
p
)
=
φ
(
i
)
×
(
p
−
1
)
\therefore φ(i×p)=φ(i)×(p−1)
∴φ(i×p)=φ(i)×(p−1)
代码:
void euler_phi(int n){
memset(phi,0,sizeof phi);//欧拉函数表
memset(vis,0,sizeof vis);//是否是质数
phi[1]=1;
for(int i=2;i<=n;i++){
if(!vis[i]){//找到质数
p[++tot]=i;//保存质数
phi[i]=i-1;//质数的欧拉函数为它自身减1
}
for(int j=1;j<=tot&&i*p[j]<=n;j++){
vis[i*p[j]]=1;//筛去合数
if(i%p[j]==0){
phi[i*p[j]]=phi[i]*p[j];//性质1
break;//继续下去没有意义,见欧拉筛法
}else
phi[i*p[j]]=phi[i]*(p[j]-1);//性质2
}
}
}
莫比乌斯函数
void euler_mu() {
memset(mu,0,sizeof mu);//莫比乌斯函数表
memset(vis,0,sizeof vis);//是否是质数
mu[1]=1;//特判
for(int i=2;i<=n;++i) {
if(!vis[i]) p[++tot]=i,mu[i]=-1;//是质数
for(int j=1;j<=tot&&i*p[j]<=n;++j) {
vis[i*p[j]]=1;
if(i%p[j]==0) {
mu[i*p[j]]=0;//有完全平方因子
break;
}
mu[i*p[j]]=-mu[i];//积性函数(p是质数,mu[p[j]]=-1)
}
}
}
一般积性函数
%%
如果想要筛出函数
f
f
f ,需要能快速求出下面三个位置的函数取值。
f
(
1
)
,
f
(
p
)
,
f
(
p
k
)
f(1),f(p),f(p^k)
f(1),f(p),f(pk) 其实就是含有的质因子数小于等于1的所有数对应的函数值。其中
p
p
p 是质数,
k
k
k 是正整数。
对于一个常见积性函数,以上所有函数值都会给出,但如果是一个一般积性函数,就需要自行计算,上面的取值,现在假设我们已经求出了上面三种位置的函数值。
考虑在筛的时候,外层循环枚举到
i
i
i,内层循环枚举到
p
r
i
[
j
]
pri[j]
pri[j],也就是说,当前正在筛
i
×
p
r
i
[
j
]
i\times pri[j]
i×pri[j] 并计算
f
(
i
×
p
r
i
[
j
]
)
f(i\times pri[j])
f(i×pri[j])。
考虑对
i
i
i 唯一分解:
i
=
∏
i
=
1
k
p
i
a
i
=
p
1
a
1
p
2
a
2
…
p
k
a
k
\begin{aligned}i=\prod_{i=1}^{k}p_i^{a_i}=p_1^{a_1}p_2^{a_2}\dots p_k^{a_k}\end{aligned}
i=i=1∏kpiai=p1a1p2a2…pkak 由欧拉筛法的精华所在(当
i
≡
0
(
m
o
d
p
[
j
]
)
i≡0\pmod {p[j]}
i≡0(modp[j]) 时可以跳出内层循环),我们可以发现,内层循环满足
p
r
i
[
j
]
⩽
p
1
pri[j]\leqslant p_1
pri[j]⩽p1(当且仅当跳出内层循环时取
“
=
”
“=”
“=”)。下面开始分类讨论:
Part 1: 当
p
r
i
[
j
]
<
p
1
pri[j]<p_1
pri[j]<p1 时,必然有
(
i
,
p
r
i
[
j
]
)
=
1
(i,pri[j])=1
(i,pri[j])=1,根据积性函数的定义有
f
(
i
×
p
r
i
[
j
]
)
=
f
(
i
)
×
f
(
p
r
i
[
j
]
)
{f(i\times pri[j])=f(i)\times f(pri[j])}
f(i×pri[j])=f(i)×f(pri[j])。
Part 2:当
p
r
i
[
j
]
=
p
1
pri[j]=p_1
pri[j]=p1 时,我们还需要记录下每个数的最小值因子的指数次幂
l
o
w
[
i
]
=
p
1
a
1
low[i]=p_1^{a_1}
low[i]=p1a1,这个数值可以递推。有了这个数值以后,可以发现,
i
l
o
w
[
i
]
\begin{aligned}\frac i{low[i]}\end{aligned}
low[i]i 不含有
p
1
p_1
p1 因子,而
l
o
w
[
i
]
×
p
r
i
[
j
]
low[i]\times pri[j]
low[i]×pri[j] 只含有
p
1
p_1
p1 因子(
p
r
i
[
j
]
=
p
1
pri[j]=p_1
pri[j]=p1),因而有
(
i
l
o
w
[
i
]
,
l
o
w
[
i
]
×
p
r
i
[
j
]
)
=
1
\begin{aligned}\left(\frac i{low[i]},low[i]\times pri[j]\right)=1\end{aligned}
(low[i]i,low[i]×pri[j])=1
故 f ( i l o w [ i ] ) × f ( l o w [ i ] × p r i [ j ] ) = f ( i × p r i [ j ] ) f\left(\frac{i}{low[i]}\right)\times f(low[i]\times pri[j])=f\left(i\times pri[j]\right) f(low[i]i)×f(low[i]×pri[j])=f(i×pri[j])
至此,我们求出了所有位置的函数值。
void sieve(long long n){
vis[1]=low[1]=1;
f[1]=对1直接定义;
for (long long i=2;i<=n;i++){
if(!vis[i]) low[i]=pri[++tot]=i,f[i]=对质数直接定义;
for(long long j=1;j<=tot&&i*pri[j]<=n;j++){
vis[i*pri[j]]=1;
if(i%pri[j]==0){
low[i*pri[j]]=low[i]*pri[j];
if(low[i]==i) f[i*pri[j]]=对质数的若干次幂进行定义(一般由f[i]递推);
else f[i*pri[j]]=f[i/low[i]]*f[low[i]*pri[j]];
break;
}
low[i*pri[j]]=pri[j];
f[i*pri[j]]=f[i]*f[pri[j]];
}
}
}
Dirichlet 卷积
定义
数论函数 定义域为正整数,陪域1(不懂)为复数的函数称为数论函数。
Dirichlet
\text{Dirichlet}
Dirichlet 卷积 定义两个数论函数
f
,
g
f,g
f,g 的
Dirichlet
\text{Dirichlet}
Dirichlet 卷积为
(
f
∗
g
)
(
n
)
=
∑
d
∣
n
f
(
d
)
g
(
n
d
)
(f*g)(n)=\sum\limits_{d|n}f(d)g(\dfrac nd)
(f∗g)(n)=d∣n∑f(d)g(dn) 也叫做狄利克雷卷积。可以验证,它的单位元为
ϵ
=
e
ϵ=e
ϵ=e。
性质
⒈
f
∗
g
=
g
∗
f
f*g=g*f
f∗g=g∗f
⒉
(
f
∗
g
)
∗
h
=
f
∗
(
g
∗
h
)
(f*g)*h=f*(g*h)
(f∗g)∗h=f∗(g∗h)
⒊
(
f
+
g
)
∗
h
=
f
∗
h
+
g
∗
h
(f + g) * h = f * h + g * h
(f+g)∗h=f∗h+g∗h
⒋
f
∗
ϵ
=
f
f*ϵ=f
f∗ϵ=f
⒌
d
=
1
∗
1
d=1*1
d=1∗1 (代入定义式即得)
⒍
σ
=
d
∗
1
σ=d*1
σ=d∗1 (代入定义式即得)
⒎
ϵ
=
μ
∗
1
ϵ=\mu*1
ϵ=μ∗1
⒏
i
d
=
φ
∗
1
id=φ*1
id=φ∗1
⒐
φ
=
μ
∗
i
d
\varphi=\mu*id
φ=μ∗id
⒑ 若
f
,
g
f,g
f,g 均为积性函数,则
f
∗
g
f*g
f∗g 为积性函数
⒒ 若
c
∗
a
=
c
∗
b
c*a=c*b
c∗a=c∗b 且
c
(
1
)
≠
0
c(1)\not=0
c(1)=0,则
a
=
b
a=b
a=b
证明
性质3证明
(
f
+
g
)
∗
h
=
∑
d
∣
n
(
f
+
g
)
(
d
)
h
(
n
d
)
=
∑
d
∣
n
(
f
(
d
)
+
g
(
d
)
)
h
(
n
d
)
=
∑
d
∣
n
f
(
d
)
h
(
n
d
)
+
g
(
d
)
h
(
n
d
)
=
∑
d
∣
n
f
(
d
)
h
(
n
d
)
+
∑
d
∣
n
g
(
d
)
h
(
n
d
)
=
f
∗
h
+
g
∗
h
\begin{aligned} (f+g)*h&=\sum_{d|n}(f+g)(d)h(\frac nd)\\ &=\sum_{d|n}\Big(f(d)+g(d)\Big)h(\frac nd)\\ &=\sum_{d|n}f(d)h(\frac nd)+g(d)h(\frac nd)\\ &=\sum_{d|n}f(d)h(\frac nd)+\sum_{d|n}g(d)h(\frac nd)\\ &=f*h+g*h \end{aligned}
(f+g)∗h=d∣n∑(f+g)(d)h(dn)=d∣n∑(f(d)+g(d))h(dn)=d∣n∑f(d)h(dn)+g(d)h(dn)=d∣n∑f(d)h(dn)+d∣n∑g(d)h(dn)=f∗h+g∗h
性质7证明
性质7等价于
∑
d
∣
n
μ
(
d
)
=
[
n
=
1
]
\begin{aligned}\sum^{^{^{^{^{}}}}}_{d|n}\mu(d)=[n=1]\end{aligned}
d∣n∑μ(d)=[n=1]
设
n
=
∏
i
=
1
k
p
i
c
i
,
n
′
=
∏
i
=
1
k
p
i
\begin{aligned}n=\prod\limits_{i=1}^{k} p_i^{c_i},n'=\prod\limits_{i=1}^k p_i\end{aligned}
n=i=1∏kpici,n′=i=1∏kpi
则有
∑
d
∣
n
μ
(
d
)
=
∑
d
∣
n
′
μ
(
d
)
=
∑
i
=
0
k
C
k
i
×
(
−
1
)
i
\begin{aligned}\sum\limits_{d|n}\mu(d)=\sum\limits_{d|n'}\mu(d)=\sum\limits_{i=0}^kC_k^i\times (-1)^i\end{aligned}
d∣n∑μ(d)=d∣n′∑μ(d)=i=0∑kCki×(−1)i
当
k
=
0
k=0
k=0 时显然成立,否则有二项式定理
二项式定理: ( a + b ) n = ∑ i = 0 n C n i a n − i b i \begin{aligned}(a+b)^{n}=\sum_{i=0}^{^{^{^{}}}n^{^{^{}}}}C_n^ia^{n-i}b^i\end{aligned} (a+b)n=i=0∑nCnian−ibi
当 a = 1 , b = − 1 a=1,b=-1 a=1,b=−1 时,有 ( 1 − 1 ) n = ∑ i = 0 n ( − 1 ) i × C n i = 0 \begin{aligned}(1-1)^n=\sum \limits _{i=0}^{^{^{^{}}}n^{^{^{}}}}(-1)^i\times C_n^i=0\end{aligned} (1−1)n=i=0∑n(−1)i×Cni=0,得证。
性质8证明
性质8等价于
∑
d
∣
n
φ
(
d
)
=
n
\begin{aligned}\sum^{^{^{^{}}}}_{d|n}\varphi(d)=n\end{aligned}
d∣n∑φ(d)=n
化简分数
1
n
,
2
n
,
3
n
,
⋯
,
n
n
\dfrac{1}{n}, \dfrac{2}{n}, \dfrac{3}{n}, \cdots,\dfrac{n}{n}
n1,n2,n3,⋯,nn
\\\,
最简分数
a
b
\dfrac ab
ba 在上面出现的话,当且仅当
b
∣
n
b|n
b∣n 且
(
a
,
b
)
=
1
(a,b)=1
(a,b)=1
那么不同的分母共有
∑
x
∣
n
1
=
d
(
n
)
\begin{aligned}\sum^{^{^{^{^{}}}}}_{x|n}1=d(n)\end{aligned}
x∣n∑1=d(n) 个
其中,以
b
b
b 为分母的分数共
φ
(
b
)
\varphi(b)
φ(b) 个
故
∑
d
∣
n
φ
(
d
)
=
n
\begin{aligned}\sum^{ ^{ ^{ ^{ }}}}_{d|n}\varphi(d)=n\end{aligned}
d∣n∑φ(d)=n,得证。
性质9证明
易得
i
d
=
i
d
∗
ϵ
id=id*ϵ
id=id∗ϵ
∵
φ
∗
1
=
i
d
,
μ
∗
1
=
ϵ
\because \varphi*1=id,\mu*1=ϵ
∵φ∗1=id,μ∗1=ϵ
∴
φ
∗
1
=
i
d
∗
μ
∗
1
\therefore \varphi*1=id*\mu*1
∴φ∗1=id∗μ∗1
两边同时约去
1
1
1,得
φ
=
μ
∗
i
d
\varphi=\mu*id
φ=μ∗id,得证。
性质10证明
前置结论:1. 若
(
n
,
m
)
=
1
,
d
∣
n
m
(n,m)=1, d|nm
(n,m)=1,d∣nm,则必定存在
a
∣
n
,
b
∣
m
a|n, b|m
a∣n,b∣m 且满足
a
b
=
d
ab=d
ab=d。
2. 若
(
n
,
m
)
=
1
,
a
∣
n
,
b
∣
m
(n,m)=1, a|n, b|m
(n,m)=1,a∣n,b∣m,则有
(
a
,
b
)
=
1
(a,b)=1
(a,b)=1。
感性理解一下即可。
令
(
n
,
m
)
=
1
(n,m)=1
(n,m)=1,则有
(
f
∗
g
)
(
n
m
)
=
∑
d
∣
n
m
f
(
d
)
g
(
n
m
d
)
(f*g)(nm)=\sum_{d|nm} f(d)g(\frac{nm}{d})
(f∗g)(nm)=d∣nm∑f(d)g(dnm)根据前置结论1,有:
(
f
∗
g
)
(
n
m
)
=
∑
a
∣
n
,
b
∣
m
f
(
a
b
)
g
(
n
m
a
b
)
(f*g)(nm)=\sum_{a|n,b|m}f(ab)g(\frac{nm}{ab})
(f∗g)(nm)=a∣n,b∣m∑f(ab)g(abnm)根据前置结论2,可得:
(
a
,
b
)
=
1
(a,b)=1
(a,b)=1。又因为
f
,
g
f,g
f,g 均为积性函数,因此有:
(
f
∗
g
)
(
n
m
)
=
∑
a
∣
n
,
b
∣
m
f
(
a
)
f
(
b
)
g
(
n
a
)
g
(
m
b
)
=
∑
a
∣
n
f
(
a
)
g
(
n
a
)
∑
b
∣
m
f
(
b
)
g
(
m
b
)
=
(
f
∗
g
)
(
n
)
×
(
f
∗
g
)
(
m
)
\begin{aligned} (f*g)(nm)&=\sum_{a|n,b|m}f(a)f(b)g(\frac na)g(\frac mb)\\ &=\sum_{a|n}f(a)g(\frac na)\sum_{b|m}f(b)g(\frac mb)\\ &=(f*g)(n)\times(f*g)(m) \end{aligned}
(f∗g)(nm)=a∣n,b∣m∑f(a)f(b)g(an)g(bm)=a∣n∑f(a)g(an)b∣m∑f(b)g(bm)=(f∗g)(n)×(f∗g)(m)
因而
f
∗
g
f*g
f∗g 为积性质函数。
性质11证明
很容易发现,本条性质说明狄利克雷卷积满足消去律。
要证明性质11,只需要证明在狄利克雷卷积意义下,所有函数都有逆元即可。即对于所有函数
f
f
f,存在函数
f
−
1
f^{-1}
f−1,使得
f
∗
f
−
1
=
ϵ
f*f^{-1}=ϵ
f∗f−1=ϵ。
注意到
ϵ
(
1
)
=
1
ϵ(1)=1
ϵ(1)=1 因而若函数
f
f
f 满足
f
(
1
)
=
0
f(1)=0
f(1)=0,则这个函数不可能有逆元,因为其与任何函数的狄利克雷卷积在
1
1
1 处的取值必然为
0
0
0。
用数学表示,就是:设有数论函数
f
f
f,若
f
(
1
)
=
0
f(1)=0
f(1)=0,则不可能存在函数
f
−
1
f^{-1}
f−1 使得
f
∗
f
−
1
=
ϵ
f*f^{-1}=ϵ
f∗f−1=ϵ。因为当
n
=
1
n=1
n=1 时,
(
f
∗
f
−
1
)
(
n
)
=
f
(
1
)
f
−
1
(
1
)
=
0
≠
ϵ
(
1
)
=
1
(f*f^{-1})(n)=f(1)f^{-1}(1)=0\not=ϵ(1)=1
(f∗f−1)(n)=f(1)f−1(1)=0=ϵ(1)=1。
事实上,对于函数
f
f
f,当
f
(
1
)
≠
0
f(1)\not=0
f(1)=0 时,其狄利克雷卷积意义下的逆元必然存在,为:
f
−
1
(
n
)
=
1
f
(
1
)
(
ϵ
(
n
)
−
∑
d
∣
n
,
d
≠
1
f
(
d
)
f
−
1
(
n
d
)
)
f^{-1}(n)=\frac 1{f(1)}\Bigg(ϵ(n)-\sum_{d|n,d\not=1}f(d)f^{-1}\Big(\frac nd\Big)\Bigg)
f−1(n)=f(1)1(ϵ(n)−d∣n,d=1∑f(d)f−1(dn)) 因此,我们只需要证明
f
∗
f
−
1
=
ϵ
f*f^{-1}=ϵ
f∗f−1=ϵ 即可。容易得到:
(
f
∗
f
−
1
)
(
n
)
=
∑
d
∣
n
f
(
d
)
f
−
1
(
n
d
)
=
f
(
1
)
f
−
1
(
n
)
+
∑
d
∣
n
,
d
≠
1
f
(
d
)
f
−
1
(
n
d
)
=
f
(
1
)
×
1
f
(
1
)
(
ϵ
(
n
)
−
∑
d
∣
n
,
d
≠
1
f
(
d
)
f
−
1
(
n
d
)
)
+
∑
d
∣
n
,
d
≠
1
f
(
d
)
f
−
1
(
n
d
)
=
ϵ
(
n
)
−
∑
d
∣
n
,
d
≠
1
f
(
d
)
f
−
1
(
n
d
)
+
∑
d
∣
n
,
d
≠
1
f
(
d
)
f
−
1
(
n
d
)
=
ϵ
(
n
)
\begin{aligned} (f*f^{-1})(n)&=\sum_{d|n}f(d)f^{-1}\Big(\frac nd\Big)\\ &=f(1)f^{-1}(n)+\sum_{d|n,d\not=1}f(d)f^{-1}\Big(\frac nd\Big)\\ &=f(1)\times \frac 1{f(1)}\Bigg(ϵ(n)-\sum_{d|n,d\not=1}f(d)f^{-1}\Big(\frac nd\Big)\Bigg)+\sum_{d|n,d\not=1}f(d)f^{-1}\Big(\frac nd\Big)\\ &=ϵ(n)-\sum_{d|n,d\not=1}f(d)f^{-1}\Big(\frac nd\Big)+\sum_{d|n,d\not=1}f(d)f^{-1}\Big(\frac nd\Big)\\ &=ϵ(n) \end{aligned}
(f∗f−1)(n)=d∣n∑f(d)f−1(dn)=f(1)f−1(n)+d∣n,d=1∑f(d)f−1(dn)=f(1)×f(1)1(ϵ(n)−d∣n,d=1∑f(d)f−1(dn))+d∣n,d=1∑f(d)f−1(dn)=ϵ(n)−d∣n,d=1∑f(d)f−1(dn)+d∣n,d=1∑f(d)f−1(dn)=ϵ(n) 得证。
中心结论
结论
∑
d
∣
(
i
,
j
)
μ
(
d
)
=
[
(
i
,
j
)
=
1
]
\begin{aligned}\sum^{ ^{ ^{ }}}\limits_{d|(i,j)}\mu(d)=[(i,j)=1]\end{aligned}
d∣(i,j)∑μ(d)=[(i,j)=1]
证明
∵
μ
∗
1
=
ϵ
\because μ*1=ϵ
∵μ∗1=ϵ
∴
∑
d
∣
n
μ
(
d
)
=
[
n
=
1
]
\begin{aligned}\therefore \sum\limits_{d|n}\mu(d)=[n=1]\end{aligned}
∴d∣n∑μ(d)=[n=1]
将
n
=
(
i
,
j
)
n=(i,j)
n=(i,j) 代入,得证。
莫比乌斯反演
结论 设
f
,
g
f,g
f,g 均为数论函数,若满足
f
(
n
)
=
∑
d
∣
n
g
(
d
)
\begin{aligned}f(n)=\sum^{ ^{ ^{^{^{}}}}}_{d|n}g(d)\end{aligned}
f(n)=d∣n∑g(d),则有
g
(
n
)
=
∑
d
∣
n
μ
(
d
)
f
(
n
d
)
\begin{aligned}g(n)=\sum^{ ^{^{^{^{}}}}}_{d|n}\mu(d)f(\dfrac nd)\end{aligned}
g(n)=d∣n∑μ(d)f(dn)
证明 原命题等价于:若
f
=
g
∗
1
f=g*1
f=g∗1,则
g
=
f
∗
μ
g=f*\mu
g=f∗μ
两边同时卷
μ
\mu
μ 得
f
∗
μ
=
g
∗
1
∗
μ
f*\mu=g*1*\mu
f∗μ=g∗1∗μ
∵
1
∗
μ
=
ϵ
\because 1*\mu=ϵ
∵1∗μ=ϵ
∴
f
∗
μ
=
g
∗
1
∗
μ
⇒
f
∗
μ
=
g
\therefore f*\mu=g*1*\mu\Rightarrow f*\mu=g
∴f∗μ=g∗1∗μ⇒f∗μ=g,得证
没错,就这么一点。因为有了上面的证明,这里的证明十分简单。
变形1 若 F ( n ) = ∑ n ∣ d f ( d ) \begin{aligned}F(n)=\sum^{^{^{^{^{}}}}}_{n|d}f(d)\end{aligned} F(n)=n∣d∑f(d),则 f ( n ) = ∑ n ∣ d μ ( d n ) F ( d ) \begin{aligned}f(n)=\sum^{^{^{^{ ^{}}}}}_{n|d}\mu(\frac{d}{n})F(d)\end{aligned} f(n)=n∣d∑μ(nd)F(d)
变形2 若 f ( k ) = ∑ i = 1 ⌊ n k ⌋ g ( i k ) \begin{aligned}f(k)=\sum_{_{_{_{_{}}}}i=1_{_{_{ _{ }}}}}^{\big\lfloor{ \large\frac{n}{k}}\big\rfloor} g(ik)\end{aligned} f(k)=i=1∑⌊kn⌋g(ik),则 g ( k ) = ∑ i = 1 ⌊ n k ⌋ f ( i k ) μ ( i ) \begin{aligned}g(k)=\sum_{_{_{_{_{}}}}i=1_{_{_{_{}}}}}^{\big\lfloor{\large \frac{n}{k}}\big\rfloor}f(ik)\mu(i)\end{aligned} g(k)=i=1∑⌊kn⌋f(ik)μ(i)
题表
题目 | 题解 |
---|---|
[POI2007]ZAP-Queries | 莫比乌斯反演 |
[HAOI2011]Problem b | 莫比乌斯反演 |
[NOI2010]能量采集 | 欧拉反演 |
参考资料
[1] 租酥雨,积性函数与线性筛
回收区
无视就好。
**性质1**若 $m\in prime,n≡0 \pmod m$ 则 $\varphi(n\times m)=\varphi(n)\times m$
**证明**构造矩阵
$\begin{bmatrix}
&1&2&\cdots&r&\cdots&n\\
&n+1&n+2&\cdots&n+r&\cdots&2n\\
&2n+1&2n+2&\cdots&2n+r&\cdots&3n\\
&\vdots&\vdots&\ddots&\vdots&\ddots&\vdots\\
&(m-1)n+1&(m-1)n+2&\cdots&(m-1)n+r&\cdots&mn\\
\end{bmatrix}$
由于 $(n,m)=1$,因此与 $nm$ 互质的数相当于与 $n$ 互质且与 $m$ 互质的数的个数。
$\because (kn+r,n)=(r, n)$
$\therefore$ 每一列的 $m$ 个元素同时与 $n$ 互素当且仅当 $(r,n)=1$。
$\therefore$ 共有 $\varphi(n)$ 列,其余列均不与 $n$ 互质。
$\,$其中满足 $(r,n)=1$ 的第 $r$ 列第 $k$ 行的数为 $kn+r$
又 $n≡0\pmod m$
$\therefore kn+r≡0\times k+r≡r\pmod m$
$\therefore (kn+r,m)=(r,m)$
又 $m\in prime,r<m$
$\therefore (kn+r,m)=1$
$\therefore$ 满足 $(r,n)=1$ 的第 $r$ 列的所有 $m$ 个数均与 $n$ 互质。
$\therefore \varphi(n\times m)=\varphi(n)\times m$
**性质1** 对于质数 $p$ 和正整数 $k$,有 $\varphi(p^k)=\varphi(p^{k-1})\times p$
**证明** 由于 $p\in prime$,因此除了 $p$ 的倍数之外,$1\sim p^k$ 之间所有数都与 $p^k$ 互质。也就是 ${\forall (1\leqslant t\leqslant p^k )∧(p\not|\,\;t),\text{gcd}(t,p^k)=1}$。而 $1\sim p^k$之间有 $\dfrac{p^k}{p}$ 个数是 $p$ 的倍数。
因此有 $\varphi(p^k)=p^k-\dfrac {p^{k}}{p}=p^k\left(1-{\dfrac 1p}\right)$。
因而 $\varphi(p^k)=p^{k-1}\left(1-{\dfrac 1p}\right)\times p=\varphi(p^{k-1})\times p$
更进一步,我们还可以得到 $\varphi$ 的通项公式:
$\begin{aligned}\varphi(p)&=\varphi(p_1^{a_1})\times \varphi(p_2^{a_2})\times \dots\times \varphi(p_k^{a_k})\\
&=n\times (1-\frac {1}{p_1})\times (1-\frac {1}{p_2})\times ……\times (1-\frac {1}{p_k})
\end{aligned}$
陪域是映射中的概念,其包含了值域在内,一般就是指值域,但又略有差别。其中值域是上下界绝对严格的,即不会出现边界虚大或虚小的情况,而陪域包括了不包含值域的部分,因而陪域仅仅是绝对包含值域的。 ↩︎