费马小定理
费马小定理 :当
p
p
p 为质数时,有
a
p
≡
a
(
m
o
d
p
)
a^{p} \equiv a \pmod p
a p ≡ a ( m o d p ) ,如果再加上
a
a
a 与
p
p
p 互质这一条件,得
a
p
−
1
≡
1
(
m
o
d
p
)
a^{p - 1} \equiv 1 \pmod p
a p − 1 ≡ 1 ( m o d p ) ,这个定理可用来求逆元,只要将式子转化为
a
p
−
2
≡
a
−
1
(
m
o
d
p
)
a^{p - 2} \equiv a^{-1} \pmod p
a p − 2 ≡ a − 1 ( m o d p ) ,这个定理不能用来准确判定质数,详情请搜索“伪质数”。 定理证明 :由二项式定理,得:
(
x
+
y
)
p
=
x
p
+
C
p
1
x
p
−
1
y
+
C
p
2
x
p
−
2
y
2
+
⋅
⋅
⋅
+
y
p
(x+y)^p = x^p + C^1_px^{p - 1}y+C^2_px^{p-2}y^2 + \cdot \cdot \cdot + y^p
( x + y ) p = x p + C p 1 x p − 1 y + C p 2 x p − 2 y 2 + ⋅ ⋅ ⋅ + y p ,当
p
p
p 为质数时,不难得出
p
∣
C
p
k
,
k
=
1
,
2
,
⋅
⋅
⋅
,
p
−
1
p | C^k_p,k = 1,2,\cdot \cdot \cdot,p - 1
p ∣ C p k , k = 1 , 2 , ⋅ ⋅ ⋅ , p − 1 ,从而
(
x
+
y
)
p
≡
x
p
+
y
p
(
m
o
d
p
)
(x+y)^p \equiv x^p + y^p \pmod p
( x + y ) p ≡ x p + y p ( m o d p ) ,此时,令
x
=
y
=
1
x=y=1
x = y = 1 ,得
2
p
≡
2
(
m
o
d
p
)
2^p \equiv 2 \pmod p
2 p ≡ 2 ( m o d p ) ,令
x
=
2
,
y
=
1
x=2,y=1
x = 2 , y = 1 ,得
3
p
≡
(
2
+
1
)
p
≡
2
p
+
1
p
≡
2
+
1
≡
3
(
m
o
d
p
)
3^p \equiv (2 + 1)^p \equiv 2^p + 1^p \equiv 2 + 1 \equiv3 \pmod p
3 p ≡ ( 2 + 1 ) p ≡ 2 p + 1 p ≡ 2 + 1 ≡ 3 ( m o d p ) ,即
3
p
≡
3
(
m
o
d
p
)
3^p \equiv 3 \pmod p
3 p ≡ 3 ( m o d p ) ,以此类推,对于所有
a
=
0
,
1
,
⋅
⋅
⋅
,
p
−
1
a=0,1,\cdot \cdot \cdot ,p-1
a = 0 , 1 , ⋅ ⋅ ⋅ , p − 1 (太大了就会直接被模),都有
a
p
≡
a
(
m
o
d
p
)
a^{p} \equiv a \pmod p
a p ≡ a ( m o d p )
威尔逊定理
威尔逊定理 :若成立
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
(p-1)! \equiv -1 \pmod p
( p − 1 ) ! ≡ − 1 ( m o d p ) ,当且仅当
p
p
p 为质数。 它的逆命题也成立,即满足
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
(p-1)! \equiv -1 \pmod p
( p − 1 ) ! ≡ − 1 ( m o d p ) 的数一定为质数。 这个定理可用来判定质数,然而,由于阶乘是一种呈爆炸性增长的运算,实际意义不大。 定理证明 : 充分性 :设
p
p
p 为质数,当
p
=
2
p=2
p = 2 时结论显然成立,当
p
≥
3
p \ge 3
p ≥ 3 时,根据逆元的知识,对于
a
=
1
,
2
,
⋯
 
,
p
−
1
a = 1,2,\cdots,p-1
a = 1 , 2 , ⋯ , p − 1 (都与
p
p
p 互质),总有一个数
a
′
a'
a ′ 使得
a
∗
a
′
≡
1
(
m
o
d
p
)
a*a' \equiv 1 \pmod{p}
a ∗ a ′ ≡ 1 ( m o d p ) ,并且对于一个数
a
a
a ,
a
′
a'
a ′ 显然不为0,故
a
′
a'
a ′ 一定在
1
,
2
,
⋯
 
,
p
−
1
1,2,\cdots,p-1
1 , 2 , ⋯ , p − 1 内有解,并且是唯一的。同时也不难得出
a
a
a 不同时
a
′
a'
a ′ 也不相同。现在找出逆元与原数相同的情况,不难得出
a
2
≡
1
(
m
o
d
p
)
a^2 \equiv 1 \pmod p
a 2 ≡ 1 ( m o d p ) ,从而
a
2
−
1
≡
0
(
m
o
d
p
)
a^2 - 1 \equiv 0 \pmod p
a 2 − 1 ≡ 0 ( m o d p ) ,所以只有当
a
a
a 为1和
p
−
1
p-1
p − 1 时,
a
′
=
a
a'=a
a ′ = a ,因此,
2
,
3
,
⋯
 
,
p
−
2
2,3,\cdots,p-2
2 , 3 , ⋯ , p − 2 ,中每两个互逆的元配对,
Π
i
=
2
p
−
2
i
≡
1
(
m
o
d
p
)
\Pi^{p-2}_{i=2}i \equiv 1 \pmod p
Π i = 2 p − 2 i ≡ 1 ( m o d p ) ,从而
(
p
−
1
)
!
≡
1
∗
1
p
−
3
2
∗
(
p
−
1
)
≡
−
1
(
m
o
d
p
)
(p-1)!\equiv 1 * 1^{p-3 \over 2}*(p-1) \equiv -1 \pmod p
( p − 1 ) ! ≡ 1 ∗ 1 2 p − 3 ∗ ( p − 1 ) ≡ − 1 ( m o d p ) ,即
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
(p-1)! \equiv -1 \pmod p
( p − 1 ) ! ≡ − 1 ( m o d p ) ,充分性得证。 必要性 :若
p
p
p 为合数,且
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
(p-1)! \equiv -1 \pmod p
( p − 1 ) ! ≡ − 1 ( m o d p ) 成立,取
p
p
p 的一个素因子
r
r
r ,则
1
<
r
<
p
1<r<p
1 < r < p ,于是
r
∣
(
p
−
1
)
!
r | (p-1)!
r ∣ ( p − 1 ) ! 。又因为
(
p
−
1
)
!
≡
−
1
(
m
o
d
p
)
(p-1)! \equiv -1 \pmod p
( p − 1 ) ! ≡ − 1 ( m o d p ) ,得(这个转化时是同余的基本性质,自己手动证明):
(
p
−
1
)
!
≡
−
1
(
m
o
d
r
)
(p-1)! \equiv -1 \pmod r
( p − 1 ) ! ≡ − 1 ( m o d r ) ,又得出:
0
≡
−
1
(
m
o
d
r
)
0 \equiv -1 \pmod r
0 ≡ − 1 ( m o d r ) ,前后矛盾,故必要性得证。
欧拉定理
欧拉定理 :当
a
a
a 与
p
p
p 互质时,有
a
ϕ
(
p
)
≡
1
(
m
o
d
p
)
a^{ \phi(p) } \equiv 1 \pmod p
a ϕ ( p ) ≡ 1 ( m o d p ) , 同样可以用来求逆元,只要把式子转化为:
a
ϕ
(
p
)
−
1
≡
a
−
1
(
m
o
d
p
)
a^{ \phi(p) - 1} \equiv a^{-1} \pmod p
a ϕ ( p ) − 1 ≡ a − 1 ( m o d p ) , 不难看出,费马小定理是欧拉定理的特殊情况。
定理证明 :这又要用到完全剩余系的知识,这个我在上一篇博客已经讲到,现在再贴出来复习吧。
完全剩余系 。 如果
a
a
a ,
b
b
b 关于模
m
m
m 同余,那么
a
a
a 与
b
b
b 同属一类,否则不同属于一类,这样可得
m
m
m 个类,即
M
i
=
{
i
+
k
∗
m
∣
k
∈
Z
}
,
i
=
0
,
1
,
2
,
⋯
 
,
m
−
1
M_i=\{i + k*m | k \in Z \} , i = 0,1,2,\cdots ,m-1
M i = { i + k ∗ m ∣ k ∈ Z } , i = 0 , 1 , 2 , ⋯ , m − 1 它们称为模
m
m
m 的剩余类。 从每个剩余类中各取一个数作为代表,这样得到的
m
m
m 个数称为模
m
m
m 的一个完全剩余系,简称完系。 完全剩余系还有一个性质,就是如果
G
C
D
(
n
,
m
)
=
1
GCD(n,m)=1
G C D ( n , m ) = 1 时,那么在
a
1
,
a
2
,
⋯
 
,
a
m
a_1,a_2,\cdots,a_m
a 1 , a 2 , ⋯ , a m 是模
m
m
m 的一个完全剩余系时,那么
n
∗
a
1
+
k
,
n
∗
a
2
+
k
,
⋯
 
,
n
∗
a
m
+
k
n * a_1 + k,n * a_2+k,\cdots ,n * a_m + k
n ∗ a 1 + k , n ∗ a 2 + k , ⋯ , n ∗ a m + k ,模
m
m
m 互不同余,也是一个完全剩余系。 证明 :反证法,若
n
∗
a
i
+
k
≡
n
∗
a
j
+
k
(
m
o
d
m
)
n * a_i + k \equiv n * a_j + k \pmod{m}
n ∗ a i + k ≡ n ∗ a j + k ( m o d m ) ,又因为
G
C
D
(
n
,
m
)
=
1
GCD(n,m)=1
G C D ( n , m ) = 1 ,不难得出
a
i
≡
a
j
(
m
o
d
m
)
a_i \equiv a_j \pmod{m}
a i ≡ a j ( m o d m ) ,与定义不成立,矛盾,故这个性质成立。
在模
n
n
n 的完全剩余系中有
ϕ
(
n
)
\phi(n)
ϕ ( n ) 个类,这类数与
n
n
n 互质。在这类数中各取一个数,就得到
ϕ
(
n
)
\phi(n)
ϕ ( n ) 个数,称这
ϕ
(
n
)
\phi(n)
ϕ ( n ) 个数为模
n
n
n 的一个缩系。 如果
a
a
a ,
b
b
b 与
n
n
n 互质,那么
a
∗
b
a*b
a ∗ b 也与
n
n
n 互质。 因而设
b
1
,
b
2
,
⋯
 
,
b
ϕ
(
n
)
b_1,b_2,\cdots,b_{\phi(n)}
b 1 , b 2 , ⋯ , b ϕ ( n ) 为一个缩系,且
a
a
a 与
n
n
n 互质,所以
a
∗
b
1
,
a
∗
b
2
,
⋯
 
,
a
∗
b
ϕ
(
n
)
a*b_1,a*b_2,\cdots,a*b_{\phi(n)}
a ∗ b 1 , a ∗ b 2 , ⋯ , a ∗ b ϕ ( n ) 均与
n
n
n 互质,并且模
n
n
n 互不同余,所以这些数也为模
n
n
n 的一个缩系,所涉及到的类相同,不难得出,这两组数之间一定存在着一一对应的关系。 因为两组数同为缩系,我们有
(
a
∗
b
1
)
∗
(
a
∗
b
2
)
∗
⋯
∗
(
a
∗
b
ϕ
(
n
)
)
≡
b
1
∗
b
2
∗
⋯
∗
b
ϕ
(
n
)
(
m
o
d
n
)
(a*b_1)*(a*b_2)*\cdots*(a*b_{\phi(n)}) \equiv b_1*b_2*\cdots*b_{\phi(n)} \pmod n
( a ∗ b 1 ) ∗ ( a ∗ b 2 ) ∗ ⋯ ∗ ( a ∗ b ϕ ( n ) ) ≡ b 1 ∗ b 2 ∗ ⋯ ∗ b ϕ ( n ) ( m o d n ) ,约去与
n
n
n 互质的
b
1
∗
b
2
∗
⋯
∗
b
ϕ
(
n
)
b_1*b_2*\cdots*b_{\phi(n)}
b 1 ∗ b 2 ∗ ⋯ ∗ b ϕ ( n ) 得
a
ϕ
(
n
)
≡
1
(
m
o
d
n
)
a^{ \phi(n) } \equiv 1 \pmod n
a ϕ ( n ) ≡ 1 ( m o d n ) ,欧拉定理得证。
扩展欧拉定理
扩展欧拉定理 : 在模
n
n
n 的情况下,
a
b
a^b
a b 的解可表示为
a
b
≡
{
a
b
%
ϕ
(
m
)
(
m
o
d
m
)
,
G
C
D
(
b
,
m
)
=
1
;
a
b
(
m
o
d
m
)
,
G
C
D
(
b
,
m
)
不
等
于
1
,
b
<
ϕ
(
m
)
;
a
(
b
%
ϕ
(
m
)
)
+
ϕ
(
m
)
(
m
o
d
m
)
,
G
C
D
(
b
,
m
)
不
等
于
1
,
b
≥
ϕ
(
m
)
a^b \equiv \begin{cases} a^{b \% \phi(m)}&\pmod m,&GCD(b,m) =1 ;\\ a^b&\pmod m, & GCD(b,m) 不等于1,b \lt \phi(m);\\ a^{(b \% \phi(m)) + \phi(m)}&\pmod m,&GCD(b,m) 不等于1,b \ge \phi(m) \end{cases}
a b ≡ ⎩ ⎪ ⎨ ⎪ ⎧ a b % ϕ ( m ) a b a ( b % ϕ ( m ) ) + ϕ ( m ) ( m o d m ) , ( m o d m ) , ( m o d m ) , G C D ( b , m ) = 1 ; G C D ( b , m ) 不 等 于 1 , b < ϕ ( m ) ; G C D ( b , m ) 不 等 于 1 , b ≥ ϕ ( m ) 定理证明 :我们只要证明第三个式子的正确性即可。 不妨考虑一个质数为
p
p
p ,
m
m
m 内的质因子
p
p
p 的个数为
k
k
k (
k
k
k 不可以一直为0),则
m
m
m 可表示为
m
=
p
k
∗
s
m=p^k*s
m = p k ∗ s 。 不难看出
G
C
D
(
s
,
p
)
=
1
GCD(s,p)=1
G C D ( s , p ) = 1 ,根据欧拉定理,不难看出
p
ϕ
(
s
)
≡
1
(
m
o
d
s
)
p^{\phi(s)} \equiv 1 \pmod s
p ϕ ( s ) ≡ 1 ( m o d s ) ,并且根据欧拉函数的性质(如下),有
ϕ
(
s
)
∣
ϕ
(
m
)
\phi(s)|\phi(m)
ϕ ( s ) ∣ ϕ ( m ) 。
对于一个质数
p
p
p ,有
ϕ
(
p
a
)
=
(
p
−
1
)
∗
p
a
−
1
\phi(p^{a})=(p-1)*p^{a-1}
ϕ ( p a ) = ( p − 1 ) ∗ p a − 1 对于任意一个合数若按照下面分解成质数幂乘积表达式
n
=
p
1
a
1
∗
p
2
a
2
∗
⋯
∗
p
m
a
m
n=p_1^{a_1}*p_2^{a_2}* \cdots * p_m^{a_m}
n = p 1 a 1 ∗ p 2 a 2 ∗ ⋯ ∗ p m a m ,则可得出
ϕ
(
n
)
=
n
∗
(
1
−
1
p
1
)
∗
(
1
−
1
p
2
)
∗
⋯
∗
(
1
−
1
p
m
)
\phi(n) = n * (1-{ 1 \over p_1 }) * (1-{ 1 \over p_2 }) * \cdots * (1-{ 1 \over p_m })
ϕ ( n ) = n ∗ ( 1 − p 1 1 ) ∗ ( 1 − p 2 1 ) ∗ ⋯ ∗ ( 1 − p m 1 )
所以
p
ϕ
(
m
)
≡
1
(
m
o
d
s
)
p^{\phi(m)} \equiv 1 \pmod s
p ϕ ( m ) ≡ 1 ( m o d s ) 。 根据同余的性质,两边以及模数同时乘以
p
k
p^k
p k ,可得
p
k
+
ϕ
(
m
)
≡
p
k
(
m
o
d
m
)
p^{k+\phi(m)} \equiv p^k \pmod{m}
p k + ϕ ( m ) ≡ p k ( m o d m ) 。 两边再乘上
p
b
−
k
p^{b-k}
p b − k (这回不包括模数),其中
b
>
ϕ
(
m
)
b > \phi(m)
b > ϕ ( m ) ,得
p
b
+
ϕ
(
m
)
≡
p
b
(
m
o
d
m
)
p^{b+\phi(m)} \equiv p^b \pmod{m}
p b + ϕ ( m ) ≡ p b ( m o d m ) 。
加上一个定理:对于
p
k
∣
n
p^k|n
p k ∣ n ,总有
k
≤
ϕ
(
n
)
k\le \phi(n)
k ≤ ϕ ( n ) (可以先研究质数幂,用数学归纳法验证)
因此
k
≤
ϕ
(
m
)
k \le \phi(m)
k ≤ ϕ ( m ) ,上面的式子可表示为
p
b
%
ϕ
(
m
)
+
ϕ
(
m
)
≡
p
b
(
m
o
d
m
)
p^{b \%\phi(m) +\phi(m)} \equiv p^b \pmod{m}
p b % ϕ ( m ) + ϕ ( m ) ≡ p b ( m o d m ) ,假设
q
=
⌊
b
ϕ
(
m
)
⌋
q=\lfloor {b \over \phi(m)} \rfloor
q = ⌊ ϕ ( m ) b ⌋ ,这个式子两边乘以
p
q
∗
ϕ
(
m
)
p^{q*\phi(m)}
p q ∗ ϕ ( m ) ,可得
p
b
+
ϕ
(
m
)
≡
p
b
+
q
∗
ϕ
(
m
)
(
m
o
d
m
)
p^{b +\phi(m)} \equiv p^{b+q*\phi(m)} \pmod{m}
p b + ϕ ( m ) ≡ p b + q ∗ ϕ ( m ) ( m o d m ) ,右边可约去
p
q
∗
ϕ
(
m
)
p^{q*\phi(m)}
p q ∗ ϕ ( m ) ,得出一开始的那个等式
p
b
+
ϕ
(
m
)
≡
p
b
(
m
o
d
m
)
p^{b+\phi(m)} \equiv p^b \pmod{m}
p b + ϕ ( m ) ≡ p b ( m o d m ) ,所以
p
b
%
ϕ
(
m
)
+
ϕ
(
m
)
≡
p
b
(
m
o
d
m
)
p^{b \%\phi(m) +\phi(m)} \equiv p^b \pmod{m}
p b % ϕ ( m ) + ϕ ( m ) ≡ p b ( m o d m ) 成立。 对于一个质数的幂,重复上面的定义,将上面的结果根据同余的一条性质进行乘幂,得:
(
p
k
)
b
≡
(
p
k
)
(
ϕ
(
m
)
+
b
)
≡
(
p
k
)
(
ϕ
(
m
)
+
b
%
ϕ
(
m
)
)
(
m
o
d
m
)
(p^k)^b \equiv (p^{k})^{(\phi(m)+b)} \equiv (p^{k})^{(\phi(m)+b \% \phi(m) )}\pmod m
( p k ) b ≡ ( p k ) ( ϕ ( m ) + b ) ≡ ( p k ) ( ϕ ( m ) + b % ϕ ( m ) ) ( m o d m ) 其中
b
≥
ϕ
(
m
)
b \ge \phi(m)
b ≥ ϕ ( m ) 且
b
∈
Z
b \in Z
b ∈ Z 。 令
a
=
Π
p
i
k
i
a=\Pi p_i^{k_i}
a = Π p i k i ,因为每一个
p
i
k
i
p_i^{k_i}
p i k i 满足上面的式子,所以这些同余式乘在一起,可得
a
(
b
%
ϕ
(
m
)
)
+
ϕ
(
m
)
≡
a
b
(
m
o
d
m
)
a^{(b \% \phi(m)) + \phi(m)} \equiv a^b \pmod m
a ( b % ϕ ( m ) ) + ϕ ( m ) ≡ a b ( m o d m ) 所以拓展欧拉定理得证。
【模板】欧拉定理https://www.luogu.org/problem/P5091 (其它两个定理的模板以后贴吧 )。 非常裸的模板题。 在快读时取模,无需高精。
#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
ll phi;
inline ll gcd ( ll a , ll b ) {
return b == 0 ? a : gcd ( b , a % b ) ;
}
inline void read1 ( ll & res ) {
res = 0 ;
ll pd = 1 ;
char a = getchar ( ) ;
while ( a < '0' || a > '9' ) {
if ( a == '-' ) {
pd = - pd;
}
a = getchar ( ) ;
}
while ( a >= '0' && a <= '9' ) {
res = ( res << 1 ) + ( res << 3 ) + ( a - '0' ) ;
res % = phi;
a = getchar ( ) ;
}
res * = pd;
return ;
}
inline void read2 ( ll & res ) {
res = 0 ;
ll pd = 1 ;
char a = getchar ( ) ;
while ( a < '0' || a > '9' ) {
if ( a == '-' ) {
pd = - pd;
}
a = getchar ( ) ;
}
bool flag = false ;
while ( a >= '0' && a <= '9' ) {
res = ( res << 1 ) + ( res << 3 ) + ( a - '0' ) ;
if ( res > phi ) {
flag = true ;
res % = phi;
}
a = getchar ( ) ;
}
if ( flag) {
res + = phi;
}
res * = pd;
return ;
}
inline ll mul ( ll a , ll b , ll m ) {
ll res = 1 ;
while ( b) {
if ( b & 1 ) {
res = ( res * a ) % m;
}
a = ( a * a ) % m;
b >>= 1 ;
}
return res;
}
int main ( ) {
ll a , m , b;
scanf ( "%lld%lld" , & a, & m) ;
ll tem = m;
phi = m;
for ( int i = 2 ; i <= tem ; ++ i ) {
if ( tem % i == 0 ) {
while ( tem % i == 0 ) {
tem / = i;
}
phi = phi - phi / i;
}
}
if ( gcd ( a , m ) == 1 ) {
read1 ( b) ;
} else {
read2 ( b) ;
}
printf ( "%lld" , mul ( a , b , m ) ) ;
return 0 ;
}
本文参考资料:《初等数论的知识与问题》(单壿 著) 《数学奥林匹克命题人讲座 初等数论》