1.扩展欧几里得(exgcd)
裴蜀定理:若有一个方程 a x + b y = c ax+by=c ax+by=c ( a , b , c a,b,c a,b,c 均为整数),当且仅当 c c c 为 g c d ( a , b ) gcd(a,b) gcd(a,b) 的倍数, x , y x,y x,y 有整数解,且整数解的个数为无限个。
证明:
1.必要条件
设
p
=
gcd
(
a
,
b
)
p= \gcd(a,b)
p=gcd(a,b) ,那么
a
=
a
′
∗
p
,
b
=
b
′
∗
p
a=a'*p,b=b'*p
a=a′∗p,b=b′∗p ,其中
gcd
(
a
′
,
b
′
)
=
1
\gcd(a',b')=1
gcd(a′,b′)=1
那么原方程可以转化为:
a
′
∗
p
∗
x
+
b
′
∗
p
∗
y
=
c
a'*p*x+b'*p*y=c
a′∗p∗x+b′∗p∗y=c
更进一步:
p
∗
(
a
′
∗
x
+
b
′
∗
y
)
=
c
p*(a'*x+b'*y)=c
p∗(a′∗x+b′∗y)=c
因为
c
c
c 为整数,所以
p
p
p 为
c
c
c 的因子,即
c
c
c 为
gcd
(
a
,
b
)
\gcd(a,b)
gcd(a,b) 的倍数,得证。
2.充分条件
先找到一组满足条件的
x
,
y
x,y
x,y
设
p
=
gcd
(
a
,
b
)
p=\gcd(a,b)
p=gcd(a,b)
很明显的,我们可以发现:
gcd
(
a
,
b
)
=
gcd
(
p
,
0
)
\gcd(a,b)=\gcd(p,0)
gcd(a,b)=gcd(p,0)
可以发现,最好找的为:当
a
=
p
,
b
=
0
a=p,b=0
a=p,b=0 时,
x
=
c
a
x=\frac{c}{a}
x=ac,
y
y
y 为任意整数(通常设为
0
0
0,因为
y
=
0
y=0
y=0 能使前面的
b
b
b 消掉,正好为原来的一组解),此时找到的
x
,
y
x,y
x,y 的解为特解,当然,特解可以通过调整
y
y
y 的大小进行更改。
运用辗转相除法的定理(即
gcd
(
a
,
b
)
=
gcd
(
b
,
a
m
o
d
b
)
\gcd(a,b)=\gcd(b,a \mod b)
gcd(a,b)=gcd(b,amodb)) 可以将
a
,
b
a,b
a,b原方程变为:
b
x
1
+
(
a
m
o
d
b
)
y
1
=
c
bx1+(a \mod b)y1=c
bx1+(amodb)y1=c
等式进行替换:
a
x
+
b
y
=
b
x
1
+
(
a
m
o
d
b
)
y
1
ax+by=bx1+(a \mod b)y1
ax+by=bx1+(amodb)y1
a
x
+
b
y
=
b
x
1
+
(
a
−
⌊
a
b
⌋
∗
b
)
y
1
=
a
∗
y
1
+
b
∗
(
x
1
−
⌊
a
b
⌋
∗
y
1
)
ax+by=bx1+(a-\lfloor \frac{a}{b}\rfloor *b)y1=a*y1+b*(x1-\lfloor\frac{a}{b}\rfloor*y1)
ax+by=bx1+(a−⌊ba⌋∗b)y1=a∗y1+b∗(x1−⌊ba⌋∗y1)
所以:
x
=
y
1
,
y
=
x
1
−
⌊
a
b
⌋
∗
y
1
x=y1,y=x1-\lfloor \frac{a}{b} \rfloor*y1
x=y1,y=x1−⌊ba⌋∗y1
可以发现,
x
,
y
x,y
x,y 均为整数,充分性得证。
通解其实就是以上的递归求出的最后的解。
求正解要将求出的通解根据当前的
c
c
c扩大
c
/
gcd
(
a
,
b
)
c/\gcd(a,b)
c/gcd(a,b) 倍(注意:不是直接扩大,而是根据扩展欧几里得扩大,不然会漏),正解就为:
X
=
x
0
∗
c
/
gcd
(
a
,
b
)
+
k
∗
b
/
gcd
(
a
,
b
)
X=x0*c/\gcd(a,b)+k*b/\gcd(a,b)
X=x0∗c/gcd(a,b)+k∗b/gcd(a,b)
Y
=
y
0
∗
c
/
gcd
(
a
,
b
)
+
k
∗
b
/
gcd
(
a
,
b
)
Y=y0*c/\gcd(a,b)+k*b/\gcd(a,b)
Y=y0∗c/gcd(a,b)+k∗b/gcd(a,b)
(
k
k
k 为任意整数)
2.欧拉函数
2.1定义
对于一个正整数
n
n
n ,将所有小于
n
n
n 的与
n
n
n 互质的个数叫做欧拉函数,记为
ϕ
(
n
)
\phi(n)
ϕ(n) ,特别的,
ϕ
(
1
)
=
1
\phi(1)=1
ϕ(1)=1。
2.2性质
1.
ϕ
(
p
)
=
p
−
1
\phi(p)=p-1
ϕ(p)=p−1 (
p
p
p 为素数)
2.
ϕ
(
p
k
)
=
p
k
−
p
k
−
1
=
(
p
−
1
)
∗
p
k
−
1
\phi(p^k)=p^{k}-p^{k-1}=(p-1)*p^{k-1}
ϕ(pk)=pk−pk−1=(p−1)∗pk−1 (
p
p
p为素数,根据容斥原理即可算出)
3.欧拉函数为积性函数(即对于两个正整数
n
,
m
n,m
n,m,如果
gcd
(
n
,
m
)
=
1
\gcd(n,m)=1
gcd(n,m)=1,那么
ϕ
(
n
∗
m
)
=
ϕ
(
n
)
∗
ϕ
(
m
)
\phi(n*m)=\phi(n)*\phi(m)
ϕ(n∗m)=ϕ(n)∗ϕ(m))
根据性质,有以下定理:
ϕ
(
n
)
=
n
∗
∏
i
=
1
r
(
1
−
1
p
i
)
\phi(n)=n*\prod_{i=1}^r(1-\frac{1}{p_{i}})
ϕ(n)=n∗i=1∏r(1−pi1)
2.3证明
根据积性函数,我们可以将
ϕ
(
n
)
\phi(n)
ϕ(n) 表示为:
ϕ
(
n
)
=
∏
i
=
1
r
ϕ
(
p
i
k
i
)
\phi(n)=\prod_{i=1}^r\phi(p_{i}^{k_{i}})
ϕ(n)=i=1∏rϕ(piki)
根据性质2,可得:
ϕ
(
n
)
=
∏
i
=
1
r
(
p
i
−
1
)
∗
p
i
k
i
−
1
\phi(n)=\prod_{i=1}^r(p_{i}-1)*p_{i}^{k_{i}-1}
ϕ(n)=i=1∏r(pi−1)∗piki−1
变一下形式:
ϕ
(
n
)
=
∏
i
=
1
r
(
1
−
1
p
i
)
∗
p
i
k
i
\phi(n)=\prod_{i=1}^r(1-\frac{1}{p_{i}})*p_{i}^{k_{i}}
ϕ(n)=i=1∏r(1−pi1)∗piki
最后化简结果便为上述的式子。
所以求欧拉函数的方法为求出所有的质因数,时间复杂度为
O
(
n
)
O(\sqrt{n})
O(n)
3.费马小定理
3.1定义
对于一个整数
a
a
a ,一个素数
p
p
p ,若
gcd
(
a
,
p
)
=
1
\gcd(a,p)=1
gcd(a,p)=1,那么:
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1} \equiv 1(\mod p)
ap−1≡1(modp)
3.2证明
我们可以发现,
1
1
1到
p
−
1
p-1
p−1 所有的数都和
p
p
p 互质
因为
gcd
(
a
,
p
)
=
1
\gcd(a,p)=1
gcd(a,p)=1 ,所以
gcd
(
2
∗
a
,
p
)
=
1
\gcd(2*a,p)=1
gcd(2∗a,p)=1 ………
gcd
(
(
p
−
1
)
∗
a
,
p
)
=
1
\gcd((p-1)*a,p)=1
gcd((p−1)∗a,p)=1
我们假设有
i
,
j
i,j
i,j符合
a
∗
i
≡
a
∗
j
(
m
o
d
p
)
a*i \equiv a*j (\mod p)
a∗i≡a∗j(modp) 那么就表示
i
=
j
i=j
i=j ,明显不符合。所以所有的
a
∗
i
m
o
d
p
a*i \mod p
a∗imodp 的集合为
(
1
,
2
,
.
.
.
,
(
p
−
1
)
)
(1,2,...,(p-1))
(1,2,...,(p−1)) 。
那么就有:
a
∗
(
a
∗
2
)
∗
.
.
.
∗
(
p
−
1
)
∗
a
≡
1
∗
2
∗
.
.
.
∗
(
p
−
1
)
(
m
o
d
p
)
a*(a*2)*...*(p-1)*a \equiv 1*2*...*(p-1) (\mod p)
a∗(a∗2)∗...∗(p−1)∗a≡1∗2∗...∗(p−1)(modp)
变一下形式:
a
p
−
1
∗
1
∗
2
∗
.
.
.
∗
(
p
−
1
)
≡
1
∗
2
∗
.
.
.
∗
(
p
−
1
)
(
m
o
d
p
)
a^{p-1}*1*2*...*(p-1) \equiv 1*2*...*(p-1)(\mod p)
ap−1∗1∗2∗...∗(p−1)≡1∗2∗...∗(p−1)(modp)
因为
1
∗
2
∗
.
.
.
∗
(
p
−
1
)
1*2*...*(p-1)
1∗2∗...∗(p−1) 与
p
p
p 是互质的 ,所以两边的
1
∗
2
∗
.
.
.
∗
(
p
−
1
)
1*2*...*(p-1)
1∗2∗...∗(p−1)可以消去:
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p-1} \equiv 1(\mod p)
ap−1≡1(modp)
即为费马小定理。
3.3应用
可以发现,当有
a
,
p
a,p
a,p 满足
a
a
a 为整数,
p
p
p 为素数 ,且
gcd
(
a
,
p
)
=
1
\gcd(a,p)=1
gcd(a,p)=1 时,有以下恒等式:
a
b
≡
a
b
m
o
d
(
p
−
1
)
(
m
o
d
p
)
a^b \equiv a^{b \mod (p-1)}(\mod p)
ab≡abmod(p−1)(modp)
4.欧拉定理 (扩展费马小定理)
4.1定义
对于整数
a
,
p
a,p
a,p,
gcd
(
a
,
p
)
=
1
\gcd(a,p)=1
gcd(a,p)=1,有:
a
ϕ
(
p
)
≡
1
(
m
o
d
p
)
a^{\phi(p)} \equiv 1 (\mod p)
aϕ(p)≡1(modp)
4.2证明
与费马小定理的证明类似。
我们设
(
P
1
.
.
.
P
ϕ
(
p
)
)
(P_{1}...P_{\phi(p)})
(P1...Pϕ(p))为与
p
p
p 互质的所有数。
那么对于每个
P
i
,
P
j
P_{i},P_{j}
Pi,Pj (
i
,
j
i,j
i,j 互不相等) ,
a
∗
P
i
m
o
d
p
a * P_{i} \mod p
a∗Pimodp 与
a
∗
P
j
m
o
d
p
a * P_{j} \mod p
a∗Pjmodp 互不相等。(原理类似与费马小定理的证明)。
因为对于每一个 a ∗ P i a*P_{i} a∗Pi 所模出来的数不可能是 p p p 的因子,所以模之后集合就为 { P 1 . . . P ϕ ( p ) P_{1}...P{\phi(p)} P1...Pϕ(p)},所以:
a ∗ a ∗ P 1 ∗ . . . ∗ a ∗ P ϕ ( p ) ≡ P 1 ∗ . . . ∗ P ϕ ( p ) ( m o d p ) a*a*P_{1}*...*a*P_{\phi(p)} \equiv P_{1}*...*P_{\phi(p)} (\mod p) a∗a∗P1∗...∗a∗Pϕ(p)≡P1∗...∗Pϕ(p)(modp)
即:
a ϕ ( p ) ∗ ( P 1 ∗ . . . ∗ P ϕ ( p ) ) ≡ P 1 ∗ . . . ∗ P ϕ ( p ) ( m o d p ) a^{\phi(p)}*(P_{1}*...*P_{\phi(p)}) \equiv P_{1}*...*P_{\phi(p)}(\mod p) aϕ(p)∗(P1∗...∗Pϕ(p))≡P1∗...∗Pϕ(p)(modp)
因为 P 1 ∗ . . . ∗ P ϕ ( p ) P_{1}*...*P_{\phi(p)} P1∗...∗Pϕ(p) 与 p p p 互质,那么两边同时消掉,得:
a ϕ ( p ) ≡ 1 ( m o d p ) a^{\phi(p)} \equiv 1 (\mod p) aϕ(p)≡1(modp)
以上为欧拉定理的证明。