数论相关
本文是一些对基础数论的总结。
欧几里得 Gcd
定义:
g
c
d
(
a
,
b
)
gcd(a,b)
gcd(a,b)即求
a
a
a和
b
b
b的最小公因数。
求法:根据
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
m
o
d
b
)
gcd(a,b)=gcd(b,a\bmod b)
gcd(a,b)=gcd(b,amodb),递归求解知道
b
=
0
b=0
b=0时,
g
c
d
(
a
,
b
)
=
a
gcd(a,b) = a
gcd(a,b)=a。
时间复杂度:
O
(
l
o
g
a
)
O(loga)
O(loga)
证明:每递归两次,
b
′
<
=
⌊
b
2
⌋
b'<= \lfloor \frac{b}{2} \rfloor
b′<=⌊2b⌋,所以最多只会进行
l
o
g
log
log次操作。
设
k
=
⌊
a
b
⌋
,
r
=
a
m
o
d
b
k = \lfloor \frac{a}{b} \rfloor, r = a \bmod b
k=⌊ba⌋,r=amodb。
当
r
=
0
r = 0
r=0时
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
0
)
=
b
gcd(a, b) = gcd(b,0) = b
gcd(a,b)=gcd(b,0)=b
正确。
当
r
>
0
r > 0
r>0时,设
d
=
g
c
d
(
a
,
b
)
,
a
=
x
d
,
b
=
y
d
d = gcd(a,b),a=xd,b=yd
d=gcd(a,b),a=xd,b=yd
r
=
a
−
k
b
=
x
d
−
k
y
d
=
(
x
−
k
y
)
d
r=a-kb=xd-kyd=(x-ky)d
r=a−kb=xd−kyd=(x−ky)d
可知
d
d
d也是
r
r
r的因数,即
g
c
d
(
b
,
r
)
=
d
′
d
gcd(b,r)=d'd
gcd(b,r)=d′d。接下来就是要证明
d
′
=
1
d'=1
d′=1即
g
c
d
(
y
,
x
−
k
y
)
=
1
gcd(y,x-ky) = 1
gcd(y,x−ky)=1。我们用反证法,设
x
−
k
y
=
n
d
′
,
y
=
m
d
′
,
d
′
>
1
x-ky=nd',y=md',d'>1
x−ky=nd′,y=md′,d′>1
x
=
k
y
+
n
d
′
=
k
m
d
′
+
n
d
′
=
(
k
m
+
n
)
d
′
a
=
x
d
=
(
k
m
+
n
)
d
′
d
b
=
y
d
=
m
d
d
′
x=ky+nd'=kmd'+nd'=(km+n)d'\\ a=xd=(km+n)d'd\\ b=yd=mdd'
x=ky+nd′=kmd′+nd′=(km+n)d′a=xd=(km+n)d′db=yd=mdd′
那
么
g
c
d
(
a
,
b
)
=
d
d
′
(
d
′
>
1
)
那
么
与
前
提
g
c
d
(
a
,
b
)
=
d
不
符
那么gcd(a,b)=dd'(d'>1)那么与前提gcd(a,b)=d不符
那么gcd(a,b)=dd′(d′>1)那么与前提gcd(a,b)=d不符
所以
d
′
=
1
,
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
r
)
。
d'=1,gcd(a,b)=gcd(b,r)。
d′=1,gcd(a,b)=gcd(b,r)。
∗ * ∗当 g c d ( n , m ) > 1 gcd(n,m)>1 gcd(n,m)>1时, a b ≡ a b m o d φ ( m ) + φ ( m ) ( m o d m ) a^b\equiv a^{b \bmod \varphi(m)+\varphi(m)}(\bmod m) ab≡abmodφ(m)+φ(m)(modm)
扩展欧几里得 ExGcd
定义:解决一类形如求
a
x
+
b
y
=
c
(
a
,
b
,
c
已
知
)
ax+by=c(a,b,c已知)
ax+by=c(a,b,c已知)最小正整数解的问题。
求法:首先方程有解的充要条件是
g
c
d
(
a
,
b
)
∣
c
gcd(a,b)|c
gcd(a,b)∣c,因为
g
c
d
(
a
,
b
)
∣
a
x
+
b
y
gcd(a,b)|ax+by
gcd(a,b)∣ax+by。对于求解
x
,
y
x,y
x,y我们只需参考去
g
c
d
gcd
gcd的方法递归求解。
假设我们要求
a
x
+
b
y
=
g
c
d
(
a
,
b
)
ax+by=gcd(a,b)
ax+by=gcd(a,b)的最小正整数解。
根据
g
c
d
(
a
,
b
)
=
g
c
d
(
b
,
a
m
o
d
b
)
a
x
+
b
y
=
g
c
d
(
a
,
b
)
b
x
′
+
(
a
m
o
d
b
)
y
′
=
g
c
d
(
b
,
a
m
o
d
b
)
gcd(a,b) = gcd(b, a \bmod b) \\ ax+by = gcd(a,b) \\ bx'+(a \bmod b)y'=gcd(b,a \bmod b)
gcd(a,b)=gcd(b,amodb)ax+by=gcd(a,b)bx′+(amodb)y′=gcd(b,amodb)
可得
a
x
+
b
y
=
b
x
′
+
(
a
m
o
d
b
)
y
′
ax+by=bx'+(a \bmod b)y'
ax+by=bx′+(amodb)y′,我们化简一下式子:
a
x
+
b
y
=
b
x
′
+
(
a
m
o
d
b
)
y
′
a
x
+
b
y
=
b
x
′
+
(
a
−
[
a
b
]
∗
b
)
y
′
a
x
+
b
y
=
a
y
′
+
b
x
′
−
[
a
b
]
∗
b
y
′
ax+by=bx'+(a \bmod b)y'\\ ax+by=bx'+(a-[\frac{a}{b}]*b)y'\\ ax+by=ay'+bx'-[\frac{a}{b}]*by'
ax+by=bx′+(amodb)y′ax+by=bx′+(a−[ba]∗b)y′ax+by=ay′+bx′−[ba]∗by′
也就是说
x
=
y
′
,
y
=
x
′
−
[
a
b
]
∗
y
′
x=y',y=x'-[\frac{a}{b}]*y'
x=y′,y=x′−[ba]∗y′,这样我们就可以递归求解,对与边界
b
=
0
b=0
b=0的情况显然
x
=
1
,
y
=
0
x=1,y=0
x=1,y=0。
对于
a
x
+
b
y
=
g
c
d
(
a
,
b
)
ax+by=gcd(a,b)
ax+by=gcd(a,b)的其他整数解,设为
x
′
,
y
′
,
g
c
d
(
a
,
b
)
=
d
,
a
′
=
a
d
,
b
′
=
b
d
x',y',gcd(a,b)= d,a'=\frac{a}{d},b'=\frac{b}{d}
x′,y′,gcd(a,b)=d,a′=da,b′=db。
a
x
+
b
y
=
a
x
′
+
b
y
′
a
(
x
−
x
′
)
=
b
(
y
′
−
y
)
a
′
(
x
−
x
′
)
=
b
′
(
y
′
−
y
)
ax+by=ax'+by' \\ a(x-x')=b(y'-y)\\ a'(x-x')=b'(y'-y)
ax+by=ax′+by′a(x−x′)=b(y′−y)a′(x−x′)=b′(y′−y)
此时
a
′
与
b
′
a'与b'
a′与b′互质,即
b
′
∣
(
x
−
x
′
)
,
a
′
∣
(
y
′
−
y
)
b'|(x-x'),a'|(y'-y)
b′∣(x−x′),a′∣(y′−y),设
b
′
k
=
(
x
−
x
′
)
b'k=(x-x')
b′k=(x−x′)那么
a
′
k
=
(
y
′
−
y
)
a'k=(y'-y)
a′k=(y′−y),也就是说
k
k
k的每种不同取值就对应这一组整数解,我们可以表达为
x
′
=
x
+
k
b
′
,
y
′
=
y
−
k
a
′
x'=x+kb',y'=y-ka'
x′=x+kb′,y′=y−ka′。
类欧几里得
定义:求解形如
∑
x
=
0
n
⌊
a
x
+
b
c
⌋
(
a
,
b
,
c
已
知
)
\sum^{n}_{x=0} \lfloor\frac{ax+b}{c}\rfloor(a,b,c已知)
∑x=0n⌊cax+b⌋(a,b,c已知)。
求法:我们先设
S
d
(
n
)
=
∑
x
=
1
n
x
d
S_d(n)=\sum^{n}_{x=1}x^d
Sd(n)=∑x=1nxd
- 如果
a
≥
c
a \geq c
a≥c,设
d
=
⌊
a
c
⌋
d=\lfloor\frac{a}{c}\rfloor
d=⌊ca⌋则有
∑ x = 0 n ⌊ a x + b c ⌋ = ∑ x = 0 n ( ⌊ ( a % c ) x + b c ⌋ + d ∗ x ) = d ∗ S 1 ( n ) + ∑ x = 0 n ⌊ ( a % c ) x + b c ⌋ \sum^{n}_{x=0} \lfloor\frac{ax+b}{c}\rfloor=\sum^{n}_{x=0}(\lfloor\frac{(a\%c)x+b}{c}\rfloor+d*x)=d*S_1(n)+\sum^{n}_{x=0}\lfloor\frac{(a\%c)x+b}{c}\rfloor x=0∑n⌊cax+b⌋=x=0∑n(⌊c(a%c)x+b⌋+d∗x)=d∗S1(n)+x=0∑n⌊c(a%c)x+b⌋
2.如果
b
≥
c
b\geq c
b≥c,设
d
=
⌊
b
c
⌋
d=\lfloor\frac{b}{c}\rfloor
d=⌊cb⌋则有
∑
x
=
0
n
⌊
a
x
+
b
c
⌋
=
∑
x
=
0
n
(
⌊
a
x
+
(
b
%
c
)
c
⌋
+
d
)
=
d
∗
S
0
(
n
)
+
∑
x
=
0
n
(
⌊
a
x
+
(
b
%
c
)
c
⌋
\sum^{n}_{x=0} \lfloor\frac{ax+b}{c}\rfloor=\sum^{n}_{x=0} (\lfloor\frac{ax+(b \% c)}{c}\rfloor +d)=d*S_0(n) +\sum^{n}_{x=0} (\lfloor\frac{ax+(b \% c)}{c}\rfloor
x=0∑n⌊cax+b⌋=x=0∑n(⌊cax+(b%c)⌋+d)=d∗S0(n)+x=0∑n(⌊cax+(b%c)⌋
根据1,2我们把规模为
(
a
,
b
,
c
,
n
)
(a,b,c,n)
(a,b,c,n)转化为规模为
(
a
%
c
,
b
%
c
,
c
,
n
)
(a\%c,b\%c,c,n)
(a%c,b%c,c,n)
3.
a
≥
c
,
b
≥
c
a\geq c,b\geq c
a≥c,b≥c时,设
M
=
⌊
a
n
+
b
c
⌋
M=\lfloor\frac{an+b}{c}\rfloor
M=⌊can+b⌋
∑
x
=
0
n
⌊
a
x
+
b
c
⌋
=
∑
x
=
0
n
∑
y
=
0
M
[
y
<
⌊
a
x
+
b
c
⌋
]
\sum^{n}_{x=0} \lfloor\frac{ax+b}{c}\rfloor=\sum^{n}_{x=0}\sum^{M}_{y=0}[y<\lfloor\frac{ax+b}{c}\rfloor]
x=0∑n⌊cax+b⌋=x=0∑ny=0∑M[y<⌊cax+b⌋]
接下来化简一下
y
<
⌊
a
x
+
b
c
⌋
y<\lfloor\frac{ax+b}{c}\rfloor
y<⌊cax+b⌋
c
∗
(
y
+
1
)
≤
a
∗
x
+
b
c
∗
y
+
c
−
b
≤
a
∗
x
c
∗
y
+
c
−
b
−
1
<
a
∗
x
x
>
⌊
c
∗
y
+
c
−
b
−
1
a
⌋
c*(y+1)\leq a*x+b\\ c*y+c-b\leq a*x\\ c*y+c-b-1< a*x\\ x> \lfloor\frac{c*y+c-b-1}{a}\rfloor
c∗(y+1)≤a∗x+bc∗y+c−b≤a∗xc∗y+c−b−1<a∗xx>⌊ac∗y+c−b−1⌋
原式
=
∑
y
=
0
M
∑
x
=
0
n
[
x
>
⌊
c
∗
y
+
c
−
b
−
1
a
⌋
]
=
∑
y
=
0
M
(
n
−
⌊
c
∗
y
+
c
−
b
−
1
a
⌋
)
=
n
∗
(
M
+
1
)
−
∑
y
=
0
M
⌊
c
∗
y
+
c
−
b
−
1
a
⌋
=\sum^{M}_{y=0}\sum^{n}_{x=0}[x> \lfloor\frac{c*y+c-b-1}{a}\rfloor]\\ =\sum^{M}_{y=0}(n- \lfloor\frac{c*y+c-b-1}{a}\rfloor)\\ =n*(M+1)-\sum^{M}_{y=0}\lfloor\frac{c*y+c-b-1}{a}\rfloor\\
=y=0∑Mx=0∑n[x>⌊ac∗y+c−b−1⌋]=y=0∑M(n−⌊ac∗y+c−b−1⌋)=n∗(M+1)−y=0∑M⌊ac∗y+c−b−1⌋
于是问题又从
(
a
%
c
,
b
%
c
,
c
,
n
)
(a\%c,b\%c,c,n)
(a%c,b%c,c,n)转换成了
(
c
,
c
−
b
%
c
−
1
,
,
a
%
c
,
M
)
(c,c-b\%c-1,,a\%c,M)
(c,c−b%c−1,,a%c,M)。
那么我们只需要递归求解就可以了,而规模每次都是取模的,所以和
G
c
d
Gcd
Gcd类似,复杂度也是
O
(
l
o
g
)
O(log)
O(log)的。
欧拉函数
模相关
中国剩余定理
定义:给定
n
n
n条形如
x
≡
a
i
(
m
o
d
m
i
)
x\equiv a_i( \bmod m_i)
x≡ai(modmi)的方程,求解
x
x
x。
(
m
i
互
质
)
(m_i互质)
(mi互质)。
求法:考虑如果
x
=
∑
i
=
1
n
F
i
x=\sum_{i=1}^n F_i
x=∑i=1nFi,且保证
满
足
{
F
i
m
o
d
m
i
=
a
i
F
i
m
o
d
m
j
(
j
≠
i
)
=
0
\\满足\left\{\begin{matrix} &F_i \bmod m_i=a_i & \\ & F_i \bmod m_j(j\not=i)=0 & \end{matrix}\right.
满足{Fimodmi=aiFimodmj(j=i)=0
那么令
M
=
∏
m
i
M=\prod m_i
M=∏mi,则
F
i
=
M
m
i
∗
(
M
m
i
)
−
1
∗
a
i
F_i=\frac{M}{m_i}*(\frac{M}{m_i})^{-1}*a_i
Fi=miM∗(miM)−1∗ai。
证明:显然满足。
组合数取模
莫比乌斯函数
定义:设函数
f
(
n
)
=
∑
d
∣
n
g
(
d
)
f(n)=\sum_{d|n}g(d)
f(n)=d∣n∑g(d)
求法:当
f
f
f函数已知的情况下可以通过一下函数求的
g
g
g函数
g
(
n
)
=
∑
d
∣
n
μ
(
d
)
∗
f
(
n
d
)
μ
(
d
)
=
{
1
,
d
=
1
(
−
1
)
k
,
d
=
p
1
∗
p
2
∗
.
.
.
p
k
(
p
i
为
互
不
相
同
的
质
数
)
0
,
其
余
g(n)=\sum_{d|n}\mu(d)*f(\frac{n}{d}) \\ \mu(d)=\left\{\begin{matrix} &1, d=1 & \\ & (-1)^k,d=p_1*p_2*...p_k (p_i为互不相同的质数)& \\ & 0,其余 & \end{matrix}\right.
g(n)=d∣n∑μ(d)∗f(dn)μ(d)=⎩⎨⎧1,d=1(−1)k,d=p1∗p2∗...pk(pi为互不相同的质数)0,其余
证明:首先,
f
(
n
)
f(n)
f(n)肯定包含
g
(
n
)
g(n)
g(n),所以
μ
(
1
)
=
1
\mu(1)=1
μ(1)=1。那么现在就要减去
f
(
n
)
f(n)
f(n)中除了
g
(
n
)
g(n)
g(n)的其他项。这就和容斥原理很像了,考虑减去除掉一个质数的
f
f
f值,加上除去两个质数的
f
f
f值…这就是
μ
(
d
)
\mu(d)
μ(d)的第二种情况。其余的
f
f
f值不用考虑,对应第三种情况。至此,就是最基础的反演。
性质一:对于任意正整数
n
n
n,有
∑
d
∣
n
μ
(
d
)
=
{
1
,
n
=
1
0
,
n
>
1
\sum_{d|n}\mu(d)=\left\{\begin{matrix} & 1,n=1 & \\ & 0,n>1& \end{matrix}\right.
d∣n∑μ(d)={1,n=10,n>1
证明:对于
n
=
1
n=1
n=1的情况,直接就是
μ
(
1
)
\mu(1)
μ(1)。那么现在考虑
n
>
1
n>1
n>1的情况。
设
n
=
p
1
x
1
∗
p
2
x
2
.
.
.
p
k
x
k
(
p
i
为
互
质
的
质
因
子
)
n=p_1^{x_1}*p_2^{x_2}...p_k^{x_k}(p_i为互质的质因子)
n=p1x1∗p2x2...pkxk(pi为互质的质因子)。设
d
=
p
1
y
1
∗
p
2
y
2
.
.
.
p
k
y
k
d=p_1^{y_1}*p_2^{y_2}...p_k^{y_k}
d=p1y1∗p2y2...pkyk,加入存在
y
i
≥
2
y_i\geq2
yi≥2,那么
μ
(
d
)
=
0
\mu(d)=0
μ(d)=0。现在考虑
y
i
=
0
或
1
y_i=0或1
yi=0或1的情况。假设
d
d
d中有
r
r
r个
i
i
i满足
y
i
=
1
y_i=1
yi=1,那么
μ
(
d
)
=
(
−
1
)
r
\mu(d)=(-1)^r
μ(d)=(−1)r,这样的
d
d
d有
C
k
r
C_k^r
Ckr个,所以
∑
d
∣
n
μ
(
d
)
=
∑
r
=
0
k
C
k
r
∗
(
−
1
)
r
=
(
1
−
1
)
k
=
0
\sum_{d|n}\mu(d)=\sum_{r=0}^kC_k^r*(-1)^r=(1-1)^k=0
d∣n∑μ(d)=r=0∑kCkr∗(−1)r=(1−1)k=0(根据二项式展开的公式)。
性质二:莫比乌斯函数是积性函数,即当 a , b a,b a,b互质时,满足 μ ( a ∗ b ) = μ ( a ) ∗ μ ( b ) \mu(a*b)=\mu(a)*\mu(b) μ(a∗b)=μ(a)∗μ(b)
性质三:设 f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)是集合上的两个函数,并满足 f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum_{d|n}g(d) f(n)=∑d∣ng(d),则 g ( n ) g(n) g(n)的积性函数的充分必要条件是 f ( i ) f(i) f(i)是积性函数。
变形一:
f
(
i
)
=
∑
d
=
1
⌊
n
i
⌋
g
(
d
∗
i
)
⇒
g
(
i
)
=
∑
d
=
1
⌊
n
i
⌋
f
(
d
∗
i
)
∗
μ
(
d
)
f(i)=\sum_{d=1}^{\left \lfloor \frac{n}{i}\right \rfloor}g(d*i)\Rightarrow g(i)=\sum_{d=1}^{\left \lfloor \frac{n}{i}\right \rfloor}f(d*i)*\mu(d)
f(i)=d=1∑⌊in⌋g(d∗i)⇒g(i)=d=1∑⌊in⌋f(d∗i)∗μ(d)往容斥方面想一想。
变形二
f
(
i
)
=
∑
i
∣
d
,
d
≤
n
g
(
d
)
⇒
g
(
i
)
=
∑
i
∣
d
,
d
≤
n
f
(
d
)
∗
μ
(
d
i
)
f(i)=\sum_{i|d,d\leq n}g(d)\Rightarrow g(i)=\sum_{i|d,d\leq n}f(d)*\mu(\frac{d}{i})
f(i)=i∣d,d≤n∑g(d)⇒g(i)=i∣d,d≤n∑f(d)∗μ(id)同样往容斥方面想一想。
线筛求 μ \mu μ:根线筛求质数一样先要把质数筛出来。那么每个质数 p p p只会被访问一次,且 μ ( p ) = − 1 \mu(p)=-1 μ(p)=−1。考虑非质数的数 x x x,我们只用 x x x的最小质因子来更新它的 μ ( x ) \mu(x) μ(x),假设枚举都数字 i i i和第 j j j个质数,那么当 i m o d p r i j = 0 i \bmod pri_j=0 imodprij=0时,由于存在存在两个相同的质因子,那么 μ ( i ∗ p r i j ) = 0 \mu(i*pri_j)=0 μ(i∗prij)=0,否则 μ ( i ∗ p r i j ) = − μ ( i ) \mu(i*pri_j)=-\mu(i) μ(i∗prij)=−μ(i)。这样就能线性的求出 μ \mu μ了。
大步小步法(BSGS)
模型:求解
a
x
≡
b
(
m
o
d
p
)
a^x \equiv b(\bmod p)
ax≡b(modp),
p
≤
1
0
9
+
7
p \leq 10^9+7
p≤109+7
解法:分两种情况讨论,
p
p
p与
a
a
a为质数,
p
p
p与
a
a
a不互质。
p p p与 a a a互质
考虑欧拉定理,当
x
>
φ
(
p
)
x > \varphi(p)
x>φ(p)在模
p
p
p意义下
a
x
a^x
ax就已经循环了,所以
x
≤
φ
(
p
)
x\leq \varphi(p)
x≤φ(p)。
设
x
=
A
p
+
B
x=A\sqrt{p}+B
x=Ap+B,则原式变为
a
A
p
+
B
≡
b
(
m
o
d
p
)
a
A
p
≡
b
∗
(
a
B
)
−
1
(
m
o
d
p
)
a^{A\sqrt{p}+B}\equiv b(\bmod p) \\ a^{A\sqrt{p}}\equiv b*(a^B)^{-1}(\bmod p)
aAp+B≡b(modp)aAp≡b∗(aB)−1(modp)
那么可以预处理右边的
n
\sqrt{n}
n种取值用
h
a
s
h
hash
hash存起来,然后直接枚举
A
A
A找
B
B
B的最小值。
复杂度
O
(
φ
(
p
)
)
O(\sqrt{\varphi(p)})
O(φ(p))
*当然设的时候可以令
x
=
A
p
−
B
x=A\sqrt{p}-B
x=Ap−B,那么就不用求逆元了。
p p p与 a a a不互质
考虑怎么把问题转化成第一种情况。
设
d
=
g
c
d
(
a
,
p
)
d=gcd(a,p)
d=gcd(a,p),那么原式变为
a
d
a
x
−
1
≡
b
d
(
m
o
d
p
d
)
a
x
−
1
≡
b
a
(
m
o
d
p
d
)
\frac{a}{d}a^{x-1} \equiv \frac{b}{d}(mod \frac{p}{d}) \\ a^{x-1} \equiv \frac{b}{a}(mod \frac{p}{d})
daax−1≡db(moddp)ax−1≡ab(moddp)
当然,当
d
∤
b
d \nmid b
d∤b时无解。
但是
a
a
a在模
p
d
\frac{p}{d}
dp意义下可能还是没有逆元,那么我们可以重复上面的步骤直到
a
a
a与模数互质,由于
d
≥
2
d\geq 2
d≥2所以这个步骤最多执行
l
o
g
log
log次。然后就转化成第一种情况了。