有什么呢…其实我也不知道什么算是数论都丢上来好了
我决定把目录删掉…这样不会太早暴露智商…
[update.它居然自动帮我加了个目录
拓展欧几里德算法
实现方式
对不完全为0的非负整数 a a a, b b b, g c d ( a , b ) gcd(a,b) gcd(a,b)必有整数对 ( x , y ) (x,y) (x,y)使 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b)成立。
- 显然,当 b = 0 b=0 b=0时, g c d ( a , b ) = a gcd(a,b)=a gcd(a,b)=a。此时有 x = 1 , y = 0 x=1,y=0 x=1,y=0.
- 据欧几里德原理有
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
m
o
d
b
)
gcd(a,b)=gcd(b,a\;mod\;b)
gcd(a,b)=gcd(b,amodb)
又有
KaTeX parse error: Got function '\newline' with no arguments as argument to '\begin{array}' at position 1: \̲n̲e̲w̲l̲i̲n̲e̲
∴ a x + b y = b x ′ + ( a m o d b ) y ′ ax+by=bx'+(a\;mod\;b)y' ax+by=bx′+(amodb)y′
= b x ′ + ( a − ⌊ a b ⌋ b ) y ′ \qquad\quad\;\;\;=bx'+(a-\lfloor\frac ab\rfloor b)y' =bx′+(a−⌊ba⌋b)y′
= a y ′ + b ( x ′ − ⌊ a b ⌋ y ′ ) \qquad\quad\;\;\;=ay'+b(x'-\lfloor\frac ab\rfloor y') =ay′+b(x′−⌊ba⌋y′)
即KaTeX parse error: Got function '\newline' with no arguments as argument to '\begin{array}' at position 1: \̲n̲e̲w̲l̲i̲n̲e̲
于是就可以递归求解了
代码如下:
void exgcd(int a,int b,int &d,int &x,int &y)
{
if (b==0)
{
x=1,y=0;d=a;
return;
}
exgcd(b,a%b,d,x,y);
int t=x;x=y,y=t-a/b*y;
}
应用
一、解不定方程
求解形如
A
x
+
B
y
=
c
Ax+By=c
Ax+By=c的不定方程
首先,若
C
C
C能被
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)整除,则方程存在整数解,否则不存在。
证明:
∵必有一组
(
x
0
,
y
0
)
(x_0,y_0)
(x0,y0)满足
A
x
0
+
B
y
0
=
g
c
d
(
A
,
B
)
Ax_0+By_0=gcd(A,B)
Ax0+By0=gcd(A,B)
令式子两端同乘
C
g
c
d
(
A
,
B
)
\frac{C}{gcd(A,B)}
gcd(A,B)C即可得一组满足的解
(
x
0
C
g
c
d
(
A
,
B
)
,
y
0
C
g
c
d
(
A
,
B
)
)
(x_0\frac{C}{gcd(A,B)},y_0\frac{C}{gcd(A,B)})
(x0gcd(A,B)C,y0gcd(A,B)C)
∴设
x
1
=
x
0
C
g
c
d
(
A
,
B
)
x_1=x_0\frac{C}{gcd(A,B)}
x1=x0gcd(A,B)C,
y
1
=
y
0
C
g
c
d
(
A
,
B
)
y_1=y_0\frac{C}{gcd(A,B)}
y1=y0gcd(A,B)C,有
A
x
1
+
B
y
1
=
C
Ax_1+By_1=C
Ax1+By1=C
而得整数解的前提就是
C
C
C能被
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)整除啊。
又
A
x
+
B
y
=
C
Ax+By=C
Ax+By=C的其他整数解满足:
A
(
x
1
+
B
g
c
d
(
A
,
B
)
×
t
)
+
B
(
y
1
−
A
g
c
d
(
A
,
B
)
×
t
)
=
C
,
t
∈
Z
A(x_1+\frac{B}{gcd(A,B)}\times t)+B(y_1-\frac{A}{gcd(A,B)}\times t)=C,t\in Z
A(x1+gcd(A,B)B×t)+B(y1−gcd(A,B)A×t)=C,t∈Z
于是即可由一组解
(
x
1
,
y
1
)
(x_1,y_1)
(x1,y1)得到该方程组的所有整数解
设
p
=
B
g
c
d
(
A
,
B
)
p=\frac{B}{gcd(A,B)}
p=gcd(A,B)B,该方程的最小整数解为
x
=
(
x
1
m
o
d
p
+
p
)
m
o
d
p
.
x=(x_1mod\;p+p)mod\;p.
x=(x1modp+p)modp.
二、解模线性方程组
同余方程
a
x
≡
b
(
m
o
d
n
)
ax\equiv b(mod\;n)
ax≡b(modn)对未知数
x
x
x有解当且仅当
g
c
d
(
a
,
n
)
∣
b
gcd(a,n)\mid b
gcd(a,n)∣b且有解时有
g
c
d
(
a
,
n
)
gcd(a,n)
gcd(a,n)个解。即若
g
c
d
(
a
,
n
)
=
1
gcd(a,n)=1
gcd(a,n)=1是方程有唯一解。
a
x
≡
b
(
m
o
d
n
)
⇒
a
x
+
n
y
=
b
ax\equiv b(mod\;n)\Rightarrow ax+ny=b
ax≡b(modn)⇒ax+ny=b
然后就转成应用1了
三、求模下的逆元
求
a
a
a在模
n
n
n下的逆元,保证
g
c
d
(
a
,
n
)
=
1
gcd(a,n)=1
gcd(a,n)=1,即求
a
x
≡
1
(
m
o
d
n
)
ax\equiv 1(mod\;n)
ax≡1(modn)中的
x
x
x。
然后就转成应用2了[:那你为什么要单独列[掀桌
题目
bzoj1407 Savage
$\$
逆元
口胡定义
a
a
a在
m
o
d
p
mod\;p
modp下的逆元即使该式
a
×
b
=
1
(
m
o
d
p
)
a\times b=1(mod\;p)
a×b=1(modp)成立的
b
b
b。
通常写成
a
−
1
a^{-1}
a−1
求法
- 据费马小定理:
假如 p p p是质数,且 g c d ( a , p ) = 1 gcd(a,p)=1 gcd(a,p)=1即 a a a、 p p p互质,那么有 a p − 1 ≡ 1 ( m o d p ) a^{p-1}\equiv 1(mod\;p) ap−1≡1(modp)。
即 a × a p − 2 ≡ 1 ( m o d p ) a\times a^{p-2}\equiv 1(mod\;p) a×ap−2≡1(modp)
所以 a a a在 m o d p mod\;p modp下的逆元为 a p − 2 a^{p-2} ap−2,这个可以快速幂求得。
注意条件哦。 - 应用拓展欧几里德求解方程(展开就懒得打了)
-
⋆
\star
⋆ 线性求逆元
前提: p p p为质数
有 a − 1 = ( p − ⌊ p a ⌋ ) × ( p m o d a ) − 1 m o d p a^{-1}=(p-\lfloor\frac pa\rfloor)\times (p\;mod\;a)^{-1}\;mod\;p a−1=(p−⌊ap⌋)×(pmoda)−1modp
证明:
令 k = ⌊ p a ⌋ , r = p m o d a k=\lfloor\frac{p}{a}\rfloor,r=p\;mod\;a k=⌊ap⌋,r=pmoda,有 p = k a + r p=ka+r p=ka+r
∴ k a + r ≡ 0 ( m o d p ) \;\;ka+r\equiv0\;(mod\;p) ka+r≡0(modp)
( k a + r ) a − 1 ⋅ r − 1 ≡ 0 ( m o d p ) \;\;(ka+r)a^{-1}·r^{-1}\equiv0\;(mod\;p) (ka+r)a−1⋅r−1≡0(modp)
即 ( k + a − 1 ⋅ r ) r − 1 ≡ 0 ( m o d p ) (k+a^{-1}·r)r^{-1}\equiv0\;(mod\;p) (k+a−1⋅r)r−1≡0(modp)
即 k r − 1 + a − 1 ≡ 0 ( m o d p ) kr^{-1}+a^{-1}\equiv0\;(mod\;p) kr−1+a−1≡0(modp)
∴(拆开) a − 1 = − ⌊ p a ⌋ ⋅ ( p m o d a ) − 1 ( m o d p ) a^{-1}=-\lfloor\frac{p}{a}\rfloor·(p\;mod\;a)^{-1}\;(mod\;p) a−1=−⌊ap⌋⋅(pmoda)−1(modp)
∴ a − 1 = ( p − ⌊ p a ⌋ ) × ( p m o d a ) − 1 m o d p a^{-1}=(p-\lfloor\frac pa\rfloor)\times (p\;mod\;a)^{-1}\;mod\;p a−1=(p−⌊ap⌋)×(pmoda)−1modp
ny[1]=1;for (i=2;i<=lim;i++) ny[i]=(LL)(p-(p/i))%p*(LL)ny[p%i]%p;
题目
bzoj2186[SDOI2008]萨拉公主的困(you)惑
$\$
中国剩余定理
坑
$\$
原根
引入一个东西,阶。
定义,设
a
a
a和
n
n
n是互质的整数,
a
≠
n
a≠n
a=n,
n
>
0
n>0
n>0.使得
a
x
≡
1
(
m
o
d
n
)
a^x\equiv1(\mod n)
ax≡1(modn)成立的最小正整数
x
x
x称为
a
a
a模
n
n
n的阶,并即为
o
r
d
n
a
ord_na
ordna.
据欧拉定理,若
g
c
d
(
a
,
n
)
=
1
,
n
∈
Z
+
gcd(a,n)=1,n\in Z^+
gcd(a,n)=1,n∈Z+,有
a
ϕ
(
n
)
≡
1
(
m
o
d
n
)
a^{\phi(n)}\equiv1(\mod n)
aϕ(n)≡1(modn)。
那么就会有
o
r
d
n
a
∣
ϕ
(
n
)
ord_na\mid\phi(n)
ordna∣ϕ(n)
口胡定义
一个正整数
x
x
x,若其所有幂次遍历模
n
n
n的所有整数,那么它就是模
n
n
n的一个原根。
定义,如果
r
r
r和
n
n
n是互质的整数且
n
>
0
n>0
n>0,那么当
o
r
d
n
r
=
ϕ
(
n
)
ord_nr=\phi(n)
ordnr=ϕ(n)时,称
r
r
r是模
n
n
n的原根或者n的原根,并且我们称
n
n
n有一原根。
性质(?反正是一些相关的定理或者推论吧)
- 若 g g g是模 n n n的一个原根, g g g和 n n n互质且 n > 0 n>0 n>0,那么 g 1 , g 2 , … , g ϕ ( n ) g^1,g^2,\dots,g^{\phi(n)} g1,g2,…,gϕ(n)构成模 n n n的既约剩余系。即有 g i m o d n g^i\mod n gimodn, 1 ≤ i ≤ ϕ ( n ) 1≤i≤\phi(n) 1≤i≤ϕ(n)的结果互不相同。
既约剩余系[来自度娘
在模n的值与n互质的全部剩余类中,从每一类中各任取一数所组成的数的集合,叫做模n的一个简化剩余系,也叫缩系。也可以理解为,在每个剩余类选取至1个与m互素代表元构成简化剩余系。
模n的简化剩余系中元素的个数为φ(n)(既欧拉函数)
- 令
r
r
r是
n
n
n的原根,
n
>
1
n>1
n>1且
n
∈
Z
n\in Z
n∈Z,那么
r
u
r^u
ru是
n
n
n的一个原根当且仅当
(
u
,
ϕ
(
n
)
)
=
1
(u,\phi(n))=1
(u,ϕ(n))=1.
于是得到如下定理,如果正整数 n n n有一个原根,那么他一共有 ϕ ( ϕ ( n ) ) \phi(\phi(n)) ϕ(ϕ(n))个不同余的原根
存在性
并非所有整数都有原根,例如没有模8的原根。
一个正整数有原根当且仅当它为2,4,
p
t
p^t
pt,
2
p
t
2p^t
2pt,其中
p
p
p为奇素数且
t
t
t的正整数。
证明就不打了。。好长啊。。整整一节。。
求解方法
通常最小的原根都比较小,所以最直接的方法:暴力枚举
假设枚举到
g
g
g问是否为
n
n
n的原根,即判断
ϕ
(
n
)
\phi(n)
ϕ(n)是否为
g
g
g模
n
n
n的阶。枚举
ϕ
(
n
)
\phi(n)
ϕ(n)的约数
p
p
p,若有
g
p
≡
1
(
m
o
d
n
)
g^p\equiv1(\mod n)
gp≡1(modn),那么
g
g
g就不是
n
n
n的原根。因为与
g
i
g^i
gi不同余矛盾,冲突。
但是这样会做了很多重复的东西。
其实只要枚举
ϕ
(
n
)
\phi(n)
ϕ(n)的质因数
p
i
p_i
pi,只需要检验
g
ϕ
(
n
)
/
p
1
,
g
ϕ
(
n
)
/
p
2
,
.
.
.
,
g
ϕ
(
n
)
/
p
m
g^{\phi(n)/p_1},g^{\phi(n)/p_2},...,g^{\phi(n)/p_m}
gϕ(n)/p1,gϕ(n)/p2,...,gϕ(n)/pm这m个数中,是否存在一个数mod
n
n
n为1,存在就不是,就好了。
模板题目
51Nod1135原根问题
$\$
积性函数
口胡定义
若函数
f
(
x
)
f(x)
f(x)是积性函数,则有:对互质的两个数
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)。
而完全积性函数是对任意
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)
先说下这个:
狄利克雷卷积( D i r i c h l e t Dirichlet Dirichlet卷积)
对两个算术函数 f f f、 g g g,定义其狄利克雷卷积为新函数:
( f ∗ g ) ( n ) = ∑ d ∣ n f ( d ) ⋅ g ( n d ) (f*g)(n)=\sum_{d|n}f(d)·g(\frac{n}{d}) (f∗g)(n)=d∣n∑f(d)⋅g(dn)
*把定义在正整数集的函数称为算术函数
其实就相当于定义新运算(?),将 f f f卷 g g g,表达为 f ∗ g f*g f∗g。
性质:
交换律: f ∗ h = g ∗ f f*h=g*f f∗h=g∗f
结合律: ( f ∗ g ) ∗ h = f ∗ ( g ∗ h ) (f*g)*h=f*(g*h) (f∗g)∗h=f∗(g∗h)
单位元: f ∗ ϵ = f f*\epsilon=f f∗ϵ=f
对逐点加法的分配律: f ∗ ( g + h ) = f ∗ g + f ∗ h f*(g+h)=f*g+f*h f∗(g+h)=f∗g+f∗h
性质
- 若 n = p 1 a 1 p 2 a 2 … p k a k n=p_1^{a_1}p_2^{a_2}\dots p_k^{a_k} n=p1a1p2a2…pkak( p p p为质数),有 f ( n ) = f ( p 1 a 1 ) f ( p 2 a 2 ) … f ( p k a k ) f(n)=f(p_1^{a_1})f(p_2^{a_2})\dots f(p_k^{a_k}) f(n)=f(p1a1)f(p2a2)…f(pkak)。
- 若 f f f为积性函数且有 f ( p n ) = f n ( p ) f(p^n)=f^n(p) f(pn)=fn(p),那么 f f f为完全积性函数。
- 若 f f f、 g g g为积性函数,那么 f ∗ g f*g f∗g也为积性函数(就是指狄利克雷卷积)。
- 积性函数的前缀和也是积性函数。
- 对于 f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum_{d|n}g(d) f(n)=∑d∣ng(d),只要有一者积性,两者都积性。
常见的积性函数(必记)
- I d ( n ) Id(n) Id(n)——单位函数,也有作 u ( n ) u(n) u(n)。定义 I d ( n ) = n Id(n)=n Id(n)=n
- I d k ( n ) Id_k(n) Idk(n)——单位幂函数,定义 I d k ( n ) = n k Id_k(n)=n^k Idk(n)=nk
- ⋆ φ ( n ) \star\varphi(n) ⋆φ(n)——欧拉函数
- ⋆ μ ( n ) \star\mu(n) ⋆μ(n)——莫比乌斯函数
- ϵ ( n ) \epsilon(n) ϵ(n)——当且仅当 n = 1 n=1 n=1时, ϵ ( n ) = 1 \epsilon(n)=1 ϵ(n)=1;否则 ϵ ( n ) = 0 \epsilon(n)=0 ϵ(n)=0
- d ( n ) d(n) d(n)—— n n n的约数个数
- σ ( n ) \sigma(n) σ(n)—— n n n的约数之和
常用的公式
- ⋆ 1 ∗ μ = ϵ \star1*\mu=\epsilon ⋆1∗μ=ϵ, 1 1 1是恒等函数恒等于1.
- ⋆ 1 ∗ φ = I d \star1*\varphi=Id ⋆1∗φ=Id
- ( I d ∗ φ ) ∗ I d = I d 2 (Id*\varphi)*Id=Id^2 (Id∗φ)∗Id=Id2
重点的展开
一、欧拉函数
φ
(
n
)
\varphi(n)
φ(n)为小于等于
n
n
n的正整数中与
n
n
n互质的个数
通式
φ
(
n
)
=
n
(
1
−
1
p
1
)
(
1
−
1
p
2
)
…
(
1
−
1
p
k
)
\varphi(n)=n(1-\frac1{p_1})(1-\frac1{p_2})\dots(1-\frac1{p_k})
φ(n)=n(1−p11)(1−p21)…(1−pk1)
其中
p
1
,
p
2
,
…
,
p
k
p_1,p_2,\dots,p_k
p1,p2,…,pk是
n
n
n的所有质因数,
n
∈
N
∗
n\in N^{*}
n∈N∗
若有质数
P
P
P,有
φ
(
p
k
)
=
(
p
−
1
)
p
k
−
1
\varphi(p^k)=(p-1)p^{k-1}
φ(pk)=(p−1)pk−1。
由
φ
(
p
k
)
=
p
k
−
p
k
−
1
\varphi(p^k)=p^k-p^{k-1}
φ(pk)=pk−pk−1得到。因为除了
p
p
p的倍数其他都与
p
k
p^k
pk互质。
- 欧拉定理
若 n n n和 a a a皆为正整数,且 n n n与 a a a互质,则 a φ ( n ) ≡ 1 ( m o d n ) a^{\varphi(n)}\equiv 1(\;mod\;n) aφ(n)≡1(modn)。
可推出:当 x ≡ y ( m o d φ ( n ) ) x\equiv y(\;mod\;\varphi(n)) x≡y(modφ(n))时且 a a a与 n n n互质时, a x ≡ a y ( m o d n ) a^x\equiv a^y(\;mod\;n) ax≡ay(modn)- 有 a x ≡ a x m o d φ ( n ) + φ ( n ) ( m o d n ) a^x\equiv a^{x\;mod\;\varphi(n)+\varphi(n)}(\;mod\;n) ax≡axmodφ(n)+φ(n)(modn), x ≥ φ ( n ) x≥\varphi(n) x≥φ(n)。[不要求 a a a, n n n互质]
对
1
∗
φ
=
I
d
1*\varphi=Id
1∗φ=Id的证明:
1
∗
φ
=
∑
d
∣
n
μ
(
d
)
⋅
1
(
n
d
)
=
∑
d
∣
n
φ
(
d
)
1*\varphi=\sum_{d|n}\mu(d)·1(\frac{n}{d})=\sum_{d|n}\varphi(d)
1∗φ=d∣n∑μ(d)⋅1(dn)=d∣n∑φ(d)
对以
n
n
n为分母的所有真分数:
0
n
\frac0n
n0,
1
n
\frac1n
n1,
2
n
\frac2n
n2
…
\dots
…,
n
−
1
n
\frac{n-1}n
nn−1进行约分。那么对于一个分母
d
d
d,
d
∣
n
d|n
d∣n,且以
d
d
d为分母的份数个数恰为
φ
(
d
)
\varphi(d)
φ(d)个。
所以有
∑
d
∣
n
φ
(
d
)
=
n
\sum_{d|n}\varphi(d)=n
∑d∣nφ(d)=n
即
1
∗
φ
=
I
d
1*\varphi=Id
1∗φ=Id
二、莫比乌斯函数
KaTeX parse error: Got function '\newline' with no arguments as argument to '\begin{array}' at position 1: \̲n̲e̲w̲l̲i̲n̲e̲
性质
- KaTeX parse error: Got function '\newline' with no arguments as argument to '\begin{array}' at position 1: \̲n̲e̲w̲l̲i̲n̲e̲
- ∑ d ∣ n μ ( d ) d = φ ( n ) n \sum_{d|n}\frac{\mu(d)}{d}=\frac{\varphi(n)}n ∑d∣ndμ(d)=nφ(n)
$\$
对
1
∗
μ
=
ϵ
1*\mu=\epsilon
1∗μ=ϵ的证明:
1
∗
μ
=
∑
d
∣
n
μ
(
d
)
∗
1
(
n
d
)
=
∑
d
∣
n
μ
(
d
)
1*\mu=\sum_{d|n}\mu(d)*1(\frac{n}{d})=\sum_{d|n}\mu(d)
1∗μ=d∣n∑μ(d)∗1(dn)=d∣n∑μ(d)
设
n
n
n有
k
k
k个不同的质因子,则公式等价与
∑
x
=
0
k
C
k
x
∗
(
−
1
)
x
\sum_{x=0}^{k}C_k^x*(-1)^x
∑x=0kCkx∗(−1)x.
据
μ
(
n
)
\mu(n)
μ(n)的定义意会一下(…),通过容斥来考虑,可知(- -)当
k
≠
0
k\neq0
k=0时,使该值为0.
即
n
≠
1
n\neq1
n=1时,
1
∗
μ
=
0
1*\mu=0
1∗μ=0
所以
1
∗
μ
=
ϵ
1*\mu=\epsilon
1∗μ=ϵ
$\$
线性筛
就是一种筛法,时间复杂度是
O
(
n
)
O(n)
O(n)。因为每个数只会被筛到一次,被其最小质因子筛到。
线性筛也通常作为一种工具(?)来在线性的时间内求出一个函数的值。
对于一个想要被线筛搞出来的函数
f
f
f,要考虑三种情况:
1、
x
x
x是质数时,
f
(
x
)
f(x)
f(x)的取值
2、
x
∣
i
x\mid i
x∣i时,
f
(
x
i
)
f(xi)
f(xi)与
f
(
x
)
f(x)
f(x)、
f
(
i
)
f(i)
f(i)的关系
3、
x
∤
i
x\nmid i
x∤i时,
f
(
x
i
)
f(xi)
f(xi)与
f
(
x
)
f(x)
f(x)、
f
(
i
)
f(i)
f(i)的关系
如果都能找得到就可以用线性筛来求辣,不一定非要是积性函数。
要注意给
f
[
1
]
f[1]
f[1]赋值
下面含有
μ
\mu
μ和
φ
\varphi
φ的线筛打法,代码:
void pre()
{
cnt=0;mu[1]=1;phi[1]=1;
for (LL i=2;i<=lim;i++)
{
if (!ispri[i]) {pri[++cnt]=i;mu[i]=-1;phi[i]=i-1;}
for (LL j=1;j<=cnt && i*pri[j]<=lim;j++)
{
ispri[i*pri[j]]=true;
if (i%pri[j]==0)
{
mu[i*pri[j]]=0;
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
mu[i*pri[j]]=-mu[i];
phi[i*pri[j]]=(pri[j]-1)*phi[i];
}
}
//for (LL i=2;i<=lim;i++) phi[i]+=phi[i-1],mu[i]+=mu[i-1];
}
题目(有关积性函数跟线性筛的)
bzoj2705[SDOI2012] Longge的问题
bzoj2440 [中山市选2011]完全平方数
bzoj2005 [Noi2010]能量采集
bzoj2226[Spoj 5971] LCMSum
bzoj2818 Gcd
bzoj3529 数表
bzoj2749 [HAOI2012]外星人
$\$
⋆ \star ⋆莫比乌斯反演
若
f
f
f为积性函数,且
g
(
n
)
=
∑
d
∣
n
f
(
d
)
g(n)=\sum_{d|n}f(d)
g(n)=∑d∣nf(d),那么
g
g
g也是积性函数。
且有
f
(
n
)
=
∑
d
∣
n
μ
(
d
)
⋅
g
(
n
d
)
f(n)=\sum_{d|n}\mu(d)·g(\frac nd)
f(n)=d∣n∑μ(d)⋅g(dn)
证明:
∵
g
(
n
)
=
∑
d
∣
n
f
(
d
)
g(n)=\sum_{d|n}f(d)
g(n)=∑d∣nf(d),即
g
=
f
∗
1
g=f*1
g=f∗1
又有
1
∗
μ
=
ϵ
1*\mu=\epsilon
1∗μ=ϵ
∴
f
=
g
∗
μ
f=g*\mu
f=g∗μ
即
f
(
n
)
=
∑
d
∣
n
μ
(
d
)
⋅
g
(
n
d
)
f(n)=\sum_{d|n}\mu(d)·g(\frac nd)
f(n)=∑d∣nμ(d)⋅g(dn)
题目
bzoj2301 [HAOI2011]Problem b
bzoj2154 Crash的数字表格
bzoj2818 Gcd (两种做法)
bzoj2693 jzptab
bzoj3309 DZY Loves Math
bzoj3994 [SDOI2015]约数个数和
bzoj4407 于神之怒加强版
$\$
杜教筛
这是个低于线性时间的复杂度下解决一类积性函数的前缀和的筛法(?)。
嗯…我只学会了搞
φ
\varphi
φ和
μ
\mu
μ的前缀和…
假装会了…
φ ( d ) \varphi(d) φ(d)的前缀和
定义
ϕ
(
n
)
=
∑
i
=
1
n
φ
(
i
)
\phi(n)=\sum_{i=1}^{n}\varphi(i)
ϕ(n)=∑i=1nφ(i),即欧拉函数的前缀和。
据公式
1
∗
φ
=
u
1*\varphi=u
1∗φ=u,即
∑
d
∣
n
φ
(
d
)
=
n
\sum_{d|n}\varphi(d)=n
∑d∣nφ(d)=n。
移项一下就变成了
φ
(
n
)
=
n
−
∑
d
∣
n
,
d
<
n
φ
(
d
)
\varphi(n)=n-\sum_{d|n,d<n}\varphi(d)
φ(n)=n−∑d∣n,d<nφ(d)。
如果是直接理解为什么 ∑ d ∣ n , d < n φ ( d ) \sum_{d|n,d<n}\varphi(d) ∑d∣n,d<nφ(d)表示小于等于 n n n且不与 n n n互质的数的个数的话
那么就将它写成 ∑ d ∣ n , d < n φ ( n d ) \sum_{d|n,d<n}\varphi(\frac nd) ∑d∣n,d<nφ(dn).
把小于等于 n d \frac nd dn且与 n d \frac nd dn互质的减掉即把与 n n n的 g c d gcd gcd为 d d d的数减掉
又 d d d是 n n n是约数
所以 ∑ d ∣ n , d < n φ ( d ) \sum_{d|n,d<n}\varphi(d) ∑d∣n,d<nφ(d)就表示小于等于 n n n且不与 n n n互质的数了啊
于是
ϕ
(
n
)
=
∑
i
=
1
n
(
i
−
∑
d
∣
i
,
d
<
i
φ
(
d
)
)
\phi(n)=\sum_{i=1}^{n}(i-\sum_{d|i,d<i}\varphi(d))
ϕ(n)=i=1∑n(i−d∣i,d<i∑φ(d))
把
i
i
i提出来就是
n
(
n
+
1
)
2
−
∑
i
=
1
n
∑
d
∣
i
,
d
<
i
φ
(
d
)
\frac{n(n+1)}{2}-\sum_{i=1}^{n}\sum_{d|i,d<i}\varphi(d)
2n(n+1)−i=1∑nd∣i,d<i∑φ(d)
即
n
(
n
+
1
)
2
−
∑
i
d
=
2
n
∑
d
=
1
⌊
n
i
d
⌋
φ
(
d
)
\frac{n(n+1)}{2}-\sum_{\frac{i}{d}=2}^{n}\sum_{d=1}^{\lfloor\frac{n}{{\frac{i}{d}}}\rfloor}\varphi(d)
2n(n+1)−di=2∑nd=1∑⌊din⌋φ(d)
换一下元,
i
d
−
>
i
\frac{i}{d}->i
di−>i
n
(
n
+
1
)
2
−
∑
i
=
2
n
∑
d
=
1
⌊
n
i
⌋
φ
(
d
)
\frac{n(n+1)}{2}-\sum_{i=2}^{n}\sum_{d=1}^{\lfloor\frac{n}{i}\rfloor}\varphi(d)
2n(n+1)−i=2∑nd=1∑⌊in⌋φ(d)
于是后面那块也变成了前缀和
n
(
n
+
1
)
2
−
∑
i
=
2
n
ϕ
(
⌊
n
i
⌋
)
\frac{n(n+1)}{2}-\sum_{i=2}^{n}\phi(\lfloor\frac{n}{i}\rfloor)
2n(n+1)−i=2∑nϕ(⌊in⌋)
综上,即有
ϕ
(
n
)
=
n
(
n
+
1
)
2
−
∑
i
=
2
n
ϕ
(
⌊
n
i
⌋
)
\phi(n)=\frac{n(n+1)}{2}-\sum_{i=2}^{n}\phi(\lfloor\frac{n}{i}\rfloor)
ϕ(n)=2n(n+1)−i=2∑nϕ(⌊in⌋)
μ ( d ) \mu(d) μ(d)的前缀和
定义
M
(
n
)
=
∑
i
=
1
n
μ
(
i
)
M(n)=\sum_{i=1}^{n}\mu(i)
M(n)=∑i=1nμ(i)。
同样的从公式入手,有
1
∗
μ
=
ϵ
1*\mu=\epsilon
1∗μ=ϵ,即
∑
d
∣
n
1
×
μ
(
d
)
=
[
n
=
1
]
\sum_{d|n}1\times \mu(d)=[n=1]
∑d∣n1×μ(d)=[n=1]
反演一下,即
1
=
∑
i
=
1
n
[
i
=
1
]
=
∑
i
=
1
n
∑
d
∣
i
μ
(
d
)
1=\sum_{i=1}^{n}[i=1]=\sum_{i=1}^{n}\sum_{d|i}\mu(d)
1=∑i=1n[i=1]=∑i=1n∑d∣iμ(d)
这个实即
∑
d
=
1
n
⌊
n
d
⌋
×
μ
(
d
)
\sum_{d=1}^{n}\lfloor\frac{n}{d}\rfloor\times\mu(d)
∑d=1n⌊dn⌋×μ(d)
令
i
∈
[
1
,
⌊
n
d
⌋
]
i∈[1,\lfloor\frac{n}{d}\rfloor]
i∈[1,⌊dn⌋]
所以就有
∑
d
=
1
n
∑
i
=
1
⌊
n
d
⌋
μ
(
d
)
\sum_{d=1}^{n}\sum_{i=1}^{\lfloor{\frac{n}{d}\rfloor}}\mu(d)
∑d=1n∑i=1⌊dn⌋μ(d)
把
i
i
i、
d
d
d换一下,即有
1
=
∑
d
=
1
n
∑
i
=
1
⌊
n
d
⌋
μ
(
d
)
1=\sum_{d=1}^{n}\sum_{i=1}^{\lfloor{\frac{n}{d}\rfloor}}\mu(d)
1=d=1∑ni=1∑⌊dn⌋μ(d)
后面那个就是莫比乌斯的前缀和,改成
M
(
⌊
n
d
⌋
)
M(\lfloor\frac{n}{d}\rfloor)
M(⌊dn⌋)
又
M
(
n
)
=
∑
i
=
1
n
M
(
⌊
n
i
⌋
)
−
∑
i
=
2
n
M
(
⌊
n
i
⌋
)
M(n)=\sum_{i=1}^{n}M(\lfloor\frac{n}{i}\rfloor)-\sum_{i=2}^{n}M(\lfloor\frac{n}{i}\rfloor)
M(n)=∑i=1nM(⌊in⌋)−∑i=2nM(⌊in⌋)
所以有
M
(
n
)
=
1
−
∑
i
=
2
n
M
(
⌊
n
i
⌋
)
M(n)=1-\sum_{i=2}^{n}M(\lfloor\frac{n}{i}\rfloor)
M(n)=1−i=2∑nM(⌊in⌋)
题目
51Nod1239
51Nod1244
bzoj3944 Sum
bzoj3512 DZY Loves Math IV
bzoj3930 [CQOI2015]选数
$\$
常用套路 怎么全是套路![掀桌.jpg
常见的解题步骤
- 根据题意列出式子
- 画柿子,直到画出自己想要的或者说能在时间内求得的
- 通常要预处理某个函数的前缀和,考虑暴力 O ( n l o g n ) O(nlogn) O(nlogn)、线性筛 O ( n ) O(n) O(n)、杜教筛 O ( n 2 3 ) O(n^{\frac 23}) O(n32)(听说的…)。。如果都不行。。我也不会了。。
- 最后通常都要分块 O ( n ) O(\sqrt{n}) O(n),利用之前预处理的函数前缀和或求和公式来处理。
等价变化的套路
- 枚举最小公约数;
- 内外层求和对调,通常是交换枚举倍数和约数;
- 有意识得化成 g c d = 1 gcd=1 gcd=1这样的的式子利用莫比乌斯反演;
- 有时候想着直接反演之前考虑一下欧拉函数,可能欧拉化的更简单;
- 换元,比如 ∑ d = 1 n ∑ t = 1 ⌊ n d ⌋ X X n d t X \sum_{d=1}^{n}\sum_{t=1}^{\lfloor\frac nd\rfloor}XX\frac {n}{dt}X ∑d=1n∑t=1⌊dn⌋XXdtnX这种时候,通常设 D = d t D=dt D=dt来进行换元;
- 要多想想式子的实际意义,可以通常意义来等价变化
- 把能提的先提出来
一些公式推导的栗子
1、原式:
∑
i
=
1
n
∑
j
=
1
m
[
g
c
d
(
i
,
j
)
=
d
]
\sum_{i=1}^{n}\sum_{j=1}^{m}[gcd(i,j)=d]
i=1∑nj=1∑m[gcd(i,j)=d]
=
∑
d
=
1
m
i
n
(
n
,
m
)
∑
⌊
i
d
⌋
=
1
n
∑
⌊
j
d
⌋
=
1
m
[
g
c
d
(
⌊
i
d
⌋
,
⌊
j
d
⌋
)
=
1
]
=\sum_{d=1}^{min(n,m)}\sum_{\lfloor\frac id\rfloor=1}^n\sum_{\lfloor\frac jd\rfloor=1}^m[gcd(\lfloor\frac id\rfloor,\lfloor\frac jd\rfloor)=1]
=d=1∑min(n,m)⌊di⌋=1∑n⌊dj⌋=1∑m[gcd(⌊di⌋,⌊dj⌋)=1]
交换枚举约数和倍数:
i
d
→
i
\frac id\rightarrow i
di→i,
j
d
→
j
\frac jd\rightarrow j
dj→j
=
∑
d
=
1
m
i
n
(
n
,
m
)
∑
i
=
1
⌊
n
d
⌋
∑
j
=
1
⌊
m
d
⌋
ϵ
(
g
c
d
(
i
,
j
)
)
=\sum_{d=1}^{min(n,m)}\sum_{i=1}^{\lfloor\frac nd\rfloor}\sum_{j=1}^{\lfloor\frac md\rfloor}\epsilon(gcd(i,j))
=d=1∑min(n,m)i=1∑⌊dn⌋j=1∑⌊dm⌋ϵ(gcd(i,j))
∵有
1
∗
μ
=
ϵ
1*\mu=\epsilon
1∗μ=ϵ,即
∑
d
∣
n
μ
(
d
)
=
ϵ
(
n
)
\sum_{d|n}\mu(d)=\epsilon(n)
∑d∣nμ(d)=ϵ(n)
所以有:
=
∑
i
=
1
n
∑
j
=
1
m
∑
d
∣
(
i
,
j
)
μ
(
d
)
=\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|(i,j)}\mu(d)
=i=1∑nj=1∑md∣(i,j)∑μ(d)
即
=
∑
i
=
1
n
∑
j
=
1
m
∑
d
∣
i
,
d
∣
j
μ
(
d
)
=\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|i , d|j}\mu(d)
=i=1∑nj=1∑md∣i,d∣j∑μ(d)
=
∑
d
=
1
m
i
n
(
n
,
m
)
μ
(
d
)
×
⌊
i
d
⌋
×
⌊
j
d
⌋
=\sum_{d=1}^{min(n,m)}\mu(d)\times \lfloor\frac{i}{d}\rfloor\times\lfloor\frac{j}{d}\rfloor
=d=1∑min(n,m)μ(d)×⌊di⌋×⌊dj⌋
2、原式:
∑
i
=
1
n
∑
j
=
1
m
g
c
d
(
i
,
j
)
\sum_{i=1}^{n}\sum_{j=1}^{m}gcd(i,j)
i=1∑nj=1∑mgcd(i,j)
=
∑
i
=
1
n
∑
j
=
1
m
∑
d
∣
(
i
,
j
)
φ
(
d
)
=\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{d|(i,j)}\varphi(d)
=i=1∑nj=1∑md∣(i,j)∑φ(d)
=
∑
d
=
1
m
i
n
(
n
,
m
)
φ
(
d
)
×
⌊
n
d
⌋
×
⌊
m
d
⌋
=\sum_{d=1}^{min(n,m)}\varphi(d)\times \lfloor\frac nd\rfloor\times \lfloor\frac md \rfloor
=d=1∑min(n,m)φ(d)×⌊dn⌋×⌊dm⌋
诶懒得复制了。。去做题吧。。推导在题解里都有。。
感想= =
- 感觉套路很深,像是定义几个函数(能预处理的)来套用化简,或者说是把化得的某串东西当成一个函数来求 之类的,这样的我都不会。怎么说,就是碰到了没有一点感觉。
- 对什么时候能直接暴力做还是要继续化简没有准确的预估。
- 画柿子画到不会画了但是又求不出来的时候…看了一眼题解…woc怎么这么套路
- 熟练应用各种性质是很重要的[但是我做不到啊QAQ]
$\$
学习资料
浅谈一类积性函数的前缀和 - skywalkert
积性函数、线性筛、莫比乌斯反演和一堆乱七八糟的题目 - jcvb
莫比乌斯反演个人小结 - femsub
初等数论及其应用(原书第六版) (美)Kenneth H.Rosen 著 夏鸿刚 译
$\$
附言
- 题目不一定按难易程度排,而且只是bo主自己做了的
- 写在上面的题目一般都写了题解
- bo主语文不好脑子也不好使,可能全在口胡
- bo主从来只有被套路,因为自己不会套路QAQ
- 为什么看起来写了很多但是都没有什么很厉害的东西QAQ
- 算了就这样吧,欢迎指错…
$\$
$\$
$\$
在愚人的一天,愚了自己。
#愚人节快乐!
更新辣因为还有好多不会的
——2017.4.12
2017/04/15 更新内容:原根