本博客主要介绍同余这一内容。当然,本博客仅代表作者自身观点如有错误,请您指出。
同余,是数论中一个特别重要的一部分,而且编程中需要用到数论的大部分都是同余相关的问题。所以本篇博客就来介绍一下关于同余的一些东西。
模运算
同余有一个十分基础的运算,叫做取模。而在计算机中,我们所说的取模一般都是进行下述运算: x m o d y = { x − ⌊ x y ⌋ × k ( x ≥ 0 ) − [ ( − x ) m o d y ] ( x < 0 ) x\ mod\ y = \begin{cases}x - \lfloor \frac{x}{y}\rfloor\times k\ \ \ \ \ (x \geq 0)\\ -[(-x)\ mod\ y]\ \ \ (x < 0)\end{cases} x mod y={x−⌊yx⌋×k (x≥0)−[(−x) mod y] (x<0)实际上,这一运算是同余问题的基础,有许多同余性质都能由模运算计算式推出。
同余
若整数 a a a与整数 b b b除以正整数 m m m的余数相等,则称 a , b a,b a,b 关于模 m m m 同余,记作 a ≡ b ( m o d m ) a\equiv b(mod\ m) a≡b(mod m)。
同余类与剩余系
显然, ∀ a ∈ [ 0 , m − 1 ] \forall a\in [0,m - 1] ∀a∈[0,m−1],集合 { a + k m } ( k ∈ Z ) \{a + km\}\ (k\in Z) {a+km} (k∈Z) 中的所有数模 m m m 同余,余数均为 a a a 。这种集合被称为一个模 m m m 的同余类,简记为 a ‾ \overline{a} a 。
由同余类的定义可知,模 m m m 的同余类共有 m m m 个,分别为 0 ‾ , 1 ‾ , 2 ‾ ⋯ m − 1 ‾ \overline{0} ,\overline{1} , \overline{2}\cdots \overline{m - 1} 0,1,2⋯m−1。它们构成 m m m 的完全剩余系。
特别地,我们将 1~ m m m 中与 m m m 互质的 φ ( m ) \varphi(m) φ(m)个数的集合称为 m m m 的简化剩余系。例如模10的简化剩余系为 { 1 ‾ , 3 ‾ , 7 ‾ , 9 ‾ } \{\overline{1} ,\overline{3},\overline{7} , \overline{9}\} {1,3,7,9}。
由简化剩余系的定义与互质的定义可以想到,对在 m m m 的简化剩余系中的任意两数进行模 m m m 乘法,所得的结果一定属于该简化剩余系。因为若 a , b ( 1 ≤ a , b ≤ m ) a, b\ (1 \leq a,b\leq m) a,b (1≤a,b≤m) 与 m m m 互质,则 a × b a\times b a×b 也没有与 m m m 相同的质因子,也就是说 a × b a\times b a×b 与 m m m 互质。再由模运算的计算式可以推出 a × b m o d m a\times b\ mod \ m a×b mod m也关于 m m m 互质,即 a × b m o d m a\times b\ mod\ m a×b mod m 也属于 m m m 的简化剩余系。这种现象称为简化剩余系关于模 m m m 乘法封闭。
欧拉定理
若正整数 a , n a,n a,n 互质,则 a φ ( n ) ≡ 1 ( m o d n ) a^{\varphi(n)}\equiv 1\ (mod\ n) aφ(n)≡1 (mod n),其中 φ ( n ) \varphi(n) φ(n) 是欧拉函数。
证明
设 n n n 的简化剩余系为 { a 1 ‾ , a 2 ‾ , a 3 ‾ ⋯ , a φ ( n ) ‾ } \{\overline{a_1},\overline{a_2},\overline{a_3}\cdots,\overline{a_{\varphi(n)}}\} {a1,a2,a3⋯,aφ(n)},那么,任取 a i , a j a_i , a_j ai,aj,若 a × a i ≡ a × a j ( m o d n ) a\times a_i\equiv a\times a_j\ (mod\ n) a×ai≡a×aj (mod n),则 a × ( a i − a j ) ≡ 0 ( m o d n ) a\times(a_i - a_j)\equiv 0 (mod\ n) a×(ai−aj)≡0(mod n),已知 a a a 与 n n n 互质,所以 a i − a j ≡ 0 ( m o d n ) a_i - a_j \equiv 0(mod\ n) ai−aj≡0(mod n),也就是说 a i ≡ a j ( m o d n ) a_i\equiv a_j(mod\ n) ai≡aj(mod n),又因为 a i , a j a_i,a_j ai,aj 取自 n n n 的简化剩余系中,所以当且仅当 a i = a j a_i = a_j ai=aj 时, a i ≡ a j ( m o d n ) a_i\equiv a_j(mod\ n) ai≡aj(mod n)。故当 a i ≠ a j a_i\neq a_j ai=aj时, a a i aa_i aai 与 a a j aa_j aaj 表示不同的同余类。
又因为简化剩余系关于模
n
n
n 乘法封闭,所以
a
a
i
‾
\overline{aa_i}
aai一定也在简化剩余系中,以此类推,可以得出
{
a
1
‾
,
a
2
‾
⋯
,
a
φ
(
n
)
‾
}
\{\overline{a_1},\overline{a_2} \cdots,\overline{a_{\varphi(n)}}\}
{a1,a2⋯,aφ(n)} 与
{
a
a
1
‾
,
a
a
2
‾
⋯
,
a
a
φ
(
n
)
‾
}
\{\overline{aa_1},\overline{aa_2} \cdots,\overline{aa_{\varphi(n)}}\}
{aa1,aa2⋯,aaφ(n)} 都是模
n
n
n 的简化剩余系。综上所述:
a
φ
(
n
)
a
1
a
2
⋯
a
φ
(
n
)
≡
(
a
a
1
)
(
a
a
2
)
⋯
(
a
a
φ
(
n
)
)
≡
a
1
a
2
⋯
a
φ
(
n
)
(
m
o
d
n
)
a^{\varphi(n)}a_1a_2\cdots a_{\varphi(n)}\equiv (aa_1)(aa_2)\cdots (aa_{\varphi(n)})\equiv a_1a_2\cdots a_{\varphi(n)}(mod\ n)
aφ(n)a1a2⋯aφ(n)≡(aa1)(aa2)⋯(aaφ(n))≡a1a2⋯aφ(n)(mod n)
所以
a
φ
(
n
)
≡
1
(
m
o
d
n
)
a^{\varphi(n)}\equiv 1(mod\ n)
aφ(n)≡1(mod n)。
证毕。
费马小定理
若 p p p 是质数,则对于任意整数 a a a ,有 a p ≡ a ( m o d p ) a^p \equiv a(mod\ p) ap≡a(mod p)
事实上,当欧拉定理中的 n n n 为质数时,代入可以得到 a n − 1 ≡ 1 ( m o d n ) a^{n - 1} \equiv 1(mod\ n) an−1≡1(mod n) ,即 a n ≡ a ( m o d n ) a^n \equiv a(mod\ n) an≡a(mod n)。也就是费马小定理。
同余方程(组)
由于本人知识面狭隘这里说的仅限线性同余方程(组)。
给定整数
a
,
b
,
m
a,b,m
a,b,m,求一个整数
x
x
x 满足
a
×
x
≡
b
(
m
o
d
m
)
a\times x\equiv b(mod\ m)
a×x≡b(mod m),或者给出无解。因为未知数的指数为 1,所以我们称这种方程为线性同余方程。
具体求解过程见扩展欧几里得算法。
线性同余方程组的定义与等式方程组定义差不多,为求多个线性同余方程的公共解。
具体求解过程见扩展中国剩余定理。