说明
人民教育出版社 A版: 数学选修 4-6 初等数论初步
人民教育出版社 B版: 数学选修 4-6 初等数论初步
离散数学(第2版) 初等数论部分
基础数论典型题解300例
初等数论第四版第4版闵嗣鹤严士健
数论入门-从故事到理论
第一讲 整数的整除
整除的定义
设a , b ∈ Z a,b \in \mathbb{Z} a , b ∈ Z ,若存在整数k ≠ 0 k \neq 0 k = 0 使得a = b k a=bk a = bk ,则称b b b 是a a a 的因子 ,记作b ∣ a b \mid a b ∣ a ,否则记做b ∤ a b \nmid a b ∤ a 。
性质
互为因子则相等: ( a ∣ b ∧ b ∣ a ) → ( a = b ∨ a = − b ) (a \mid b \land b \mid a) \to (a = b \lor a = -b) ( a ∣ b ∧ b ∣ a ) → ( a = b ∨ a = − b ) .
传递性: ( a ∣ b ∧ b ∣ c ) → a ∣ c (a \mid b \land b \mid c) \to a \mid c ( a ∣ b ∧ b ∣ c ) → a ∣ c
a ∣ b ∧ a ∣ c → a ∣ ( b x + c y ) , x , y ∈ Z a \mid b \land a \mid c \to a \mid (bx + cy) , x,y \in \mathbb{Z} a ∣ b ∧ a ∣ c → a ∣ ( b x + cy ) , x , y ∈ Z
消去律: a k ∣ x k → a ∣ x ak \mid xk \to a \mid x ak ∣ x k → a ∣ x
证明
(1): a ∣ b → ∃ k 1 ≠ 0 : a = b k 1 a \mid b \to \exists k_1 \neq 0: a = b k_1 a ∣ b → ∃ k 1 = 0 : a = b k 1 . 同理 b ∣ a → ∃ k 2 ≠ 0 : b = a k 2 b \mid a \to \exists k_2 \neq 0: b = a k_2 b ∣ a → ∃ k 2 = 0 : b = a k 2 . 得到b ⋅ k 1 ⋅ k 2 = b → k 1 ⋅ k 2 = 1 → k 1 = k 2 = ± 1 b \cdot k_1 \cdot k_2 = b \to k_1 \cdot k_2 = 1 \to k_1 = k_2 = \pm 1 b ⋅ k 1 ⋅ k 2 = b → k 1 ⋅ k 2 = 1 → k 1 = k 2 = ± 1 .于是a = b ∨ a = − b a = b \lor a = -b a = b ∨ a = − b
(2): 根据前件得到:a ⋅ k 1 = b , b ⋅ k 2 = c → a ⋅ k 1 ⋅ k 2 = c a \cdot k_1 = b, b \cdot k_2 = c \to a \cdot k_1 \cdot k_2 = c a ⋅ k 1 = b , b ⋅ k 2 = c → a ⋅ k 1 ⋅ k 2 = c . 于是a ∣ c a \mid c a ∣ c
(3): 是这里最难证明的.
显然 a ∣ b → a ∣ k ⋅ b a \mid b \to a \mid k \cdot b a ∣ b → a ∣ k ⋅ b .再证明a ∣ b ∧ a ∣ c → a ∣ ( b + c ) a \mid b \land a \mid c \to a \mid (b+c) a ∣ b ∧ a ∣ c → a ∣ ( b + c ) .
a ∣ b ∧ a ∣ c → ( a ⋅ k 1 = b ∧ a ⋅ k 2 = c ) → a ⋅ ( k 1 + k 2 ) = b + c → a ∣ ( b + c )
\begin{aligned}
a \mid b \land a \mid c & \to (a \cdot k_1 = b \land a \cdot k_2 = c) \\
& \to a \cdot (k_1 + k_2) = b + c \\
& \to a \mid (b+c) \\
\end{aligned}
a ∣ b ∧ a ∣ c → ( a ⋅ k 1 = b ∧ a ⋅ k 2 = c ) → a ⋅ ( k 1 + k 2 ) = b + c → a ∣ ( b + c ) 又因为a ∣ b x , a ∣ c y a \mid bx , a \mid cy a ∣ b x , a ∣ cy 成立,所以a ∣ ( b x + c y ) a \mid (bx + cy) a ∣ ( b x + cy ) 成立.
(4). a k ∣ x k → a ⋅ k ⋅ k 1 = x ⋅ k → a ⋅ k 1 = x → a ∣ x ak \mid xk \to a \cdot k \cdot k_1 = x \cdot k \to a \cdot k_1 = x \to a \mid x ak ∣ x k → a ⋅ k ⋅ k 1 = x ⋅ k → a ⋅ k 1 = x → a ∣ x
1.2 带余除法
带余除法
对于任意一对整数a , b a,b a , b ,其中b ≠ 0 b \neq 0 b = 0 ,**存在唯一一对整数q , r q,r q , r ,使得
a = b q + r , 0 ≤ r < ∣ b ∣
a = bq + r, \quad 0 \leq r < |b|
a = b q + r , 0 ≤ r < ∣ b ∣
这里没有证明.这里可以通过枚举法 感性的理解它的正确性.
3. 素数判定
法1:判断单个数字是否为素数,时间为n \sqrt n n
bool isPrime ( int a) {
for ( int i = 2 ; i * i <= a; i++ ) {
if ( a % i == 0 ) return 0 ;
}
return 1 ;
}
复制
如果从快速得到[ 1 , n ] [1,n] [ 1 , n ] 之间的所有的素数呢?,如果对每一个数调用i s P r i m e ( i ) isPrime(i) i s P r im e ( i ) ,那时间为n × n n \times \sqrt n n × n .
还有一种更快的方法,叫做埃氏筛法.o
它的基本思想如下:
删除[ 1 , n ] [1,n] [ 1 , n ] 之间的所有的合数.
[ 1 , n ] [1,n] [ 1 , n ] 之间的所有的素数一定不会被删除.
证明这个算法的正确性,集合不漏与数学归纳法.
对某个合数a ⩾ 2 a \geqslant 2 a ⩾ 2 ,它一定可以被不超过a \sqrt a a 的素数整除.那么合数a a a 被删除一定要保证[ 2 , a ] [2,\sqrt a] [ 2 , a ] 之间的素数不被删除. 观察算法,发现只有一个数是两个数的乘积时才会被删除,显然素数都不会被删除.所以合数a一定被删除(不漏),所以算法的正确性是显然的.
# include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5 ;
bool del[ maxn] ;
vector< int > prime;
void E_prime ( int n) {
for ( int i= 2 ; i<= n; i++ ) {
if ( del[ i] == 0 ) {
prime. push_back ( i) ;
if ( i > n / i ) continue ;
for ( int j= i* i; j<= n; j+= i) del[ j] = 1 ;
}
}
}
int main ( ) {
E_prime ( 100 ) ;
for ( const auto & e : prime) {
cout << e << " " ;
}
cout << endl;
return 0 ;
}
复制
因为有重复 的删除,所以时间复杂度为O ( n log log n ) O(n \log \log n) O ( n log log n ) ,比枚举法要快.
二 最大公因数与最小公倍数
定义:
公因数: a ∣ b ∧ a ∣ c a \mid b \land a \mid c a ∣ b ∧ a ∣ c ,a是b , c b,c b , c 的公因数.
最大公因数: g c d ( b , c ) = m a x ( A ) , A = { a ∣ a ∣ b ∧ a ∣ c } gcd(b,c) = max(A),A =\{a | a \mid b \land a \mid c\} g c d ( b , c ) = ma x ( A ) , A = { a ∣ a ∣ b ∧ a ∣ c }
互素: g c d ( a , b ) = 1 gcd(a,b) = 1 g c d ( a , b ) = 1
我们早就就过g c d gcd g c d ,也就是辗转相除法 .代码很简单,如下
int gcd ( int a, int b)
{
if ( b == 0 ) return a;
return gcd ( b, a% b) ;
}
复制
当然也可以使用c++内置的__gcd()函数.
证明:
显然0 0 0 与任意数x x x 的最公因数都是x x x 本身: g c d ( 0 , x ) = x gcd(0,x) = x g c d ( 0 , x ) = x .
设a , b , r 1 a,b,r_1 a , b , r 1 ,其中r 1 = a m o d b r_1 = a \mod b r 1 = a mod b . 也就是可以写成带余除法的形式: a = b q + r 1 a = bq + r_1 a = b q + r 1
设( a , b ) (a,b) ( a , b ) 表示a , b a,b a , b 公因数形成的集合
现在我们只要证明( a , b ) = ( b , r 1 ) (a,b) = (b,r_1) ( a , b ) = ( b , r 1 ) ,就能证明g c d ( a , b ) = g c d ( b , r 1 ) gcd(a,b) = gcd(b,r_1) g c d ( a , b ) = g c d ( b , r 1 )
证明:x ∈ ( a , b ) → x ∈ ( b , r 1 ) x \in (a,b) \to x \in (b,r_1) x ∈ ( a , b ) → x ∈ ( b , r 1 ) ,那么根据前提得到x ∣ a , x ∣ b x \mid a,x\mid b x ∣ a , x ∣ b ,又得知r 1 = a − b q r_1 = a -bq r 1 = a − b q ,根据整数的整除性质3,得到x ∣ a − b q → x ∣ r 1 x \mid a - bq \to x \mid r_1 x ∣ a − b q → x ∣ r 1 .得到( a , b ) ⊂ ( b , r 1 ) (a,b) \subset (b,r_1) ( a , b ) ⊂ ( b , r 1 )
证明:x ∈ ( b , r 1 ) → x ∈ ( a , b ) x \in (b,r_1) \to x \in (a,b) x ∈ ( b , r 1 ) → x ∈ ( a , b ) ,同理: x ∣ b , x ∣ r 1 x \mid b ,x \mid r_1 x ∣ b , x ∣ r 1 ,同样根据性质3得到x ∣ a = b q + r 1 x \mid a = bq + r_1 x ∣ a = b q + r 1 ,得到( b , r 1 ) ⊂ ( a , b ) (b,r_1) \subset (a,b) ( b , r 1 ) ⊂ ( a , b )
所以( a , b ) = ( b , r 1 ) (a,b) = (b,r_1) ( a , b ) = ( b , r 1 ) ,得证. 你可以写一个暴力的代码验证二者的集合是不是一样.
重要性质
g c d ( a , b ) = a x + b y
gcd(a,b) = ax + by
g c d ( a , b ) = a x + b y 一定成立
a,b的最大公因数可以通过最a,b各乘以一个整数后相加凑出来
证明: 辗转相除法加上数学归纳法.这个算法叫做e x g c d exgcd e xg c d 算法.
a ∣ b c ∧ g c d ( a , b ) = 1 → a ∣ c
a \mid bc \land gcd(a,b) = 1 \to a \mid c
a ∣ b c ∧ g c d ( a , b ) = 1 → a ∣ c
证明见书P11
设p是素数,若p ∣ a b p \mid ab p ∣ ab ,则 p ∣ a ∨ p ∣ b p \mid a \lor p \mid b p ∣ a ∨ p ∣ b
通过代码我们发现,l c m ( a , b ) × g c d ( a , b ) = ∣ a × b ∣ lcm(a,b) \times gcd(a,b) = | a \times b | l c m ( a , b ) × g c d ( a , b ) = ∣ a × b ∣
gcd_lcm.py
如果证明这个结论的正确性呢? 先使用缩小法(特例法),把问题变得简单,当a,b互质时,g c d ( a , b ) = 1 gcd(a,b) = 1 g c d ( a , b ) = 1 , 那么l c m ( a , b ) = a × b lcm(a,b) = a \times b l c m ( a , b ) = a × b . 先证明这个公式的正确性.
证明:
先把l c m ( a , b ) = a × b lcm(a,b) = a \times b l c m ( a , b ) = a × b 转成我们容易理解的样子a ⋅ x = b ⋅ y a \cdot x = b \cdot y a ⋅ x = b ⋅ y ,其中x , y x,y x , y 是整数. x = b ⋅ y a x = \frac{b \cdot y}{a} x = a b ⋅ y ,根据已知条件a , b , x , y a,b,x,y a , b , x , y 是整数,a,b互质,所以b ⋅ y a \frac{b \cdot y}{a} a b ⋅ y 是整数.但b ÷ a b \div a b ÷ a 不是整数,那么必然y ÷ a y \div a y ÷ a 是整数,所以a ∣ y a \mid y a ∣ y ,同理b ∣ x b \mid x b ∣ x , 得到y = k 1 a , x = k 2 b y = k_1 a, x = k_2 b y = k 1 a , x = k 2 b ,代入得到a k 2 b = b k 1 a → k 1 = k 2 a k_2 b = b k_1 a \to k_1 = k_2 a k 2 b = b k 1 a → k 1 = k 2 ,显然k 1 = k 2 = 1 k_1 = k_2 = 1 k 1 = k 2 = 1 ,得到最小的倍数,证明结束.
证明2: 再来证明g c d ( a , b ) ≠ 1 gcd(a,b) \neq 1 g c d ( a , b ) = 1 时
设g c d ( a , b ) × x = a , g c d ( a , b ) × y = b gcd(a,b) \times x = a , gcd(a,b) \times y = b g c d ( a , b ) × x = a , g c d ( a , b ) × y = b ,使用反证法可以得到g c d ( x , y ) = 1 gcd(x,y) = 1 g c d ( x , y ) = 1 ,也就是x , y x,y x , y 互质.
同样设l c m ( a , b ) = a × k 1 = b × k 2 lcm(a,b) = a \times k_1 = b \times k_2 l c m ( a , b ) = a × k 1 = b × k 2 ,其中k 1 , k 2 k_1,k_2 k 1 , k 2 是整数.
综上得到 g c d ( a , b ) × x × k 1 = g c d ( a , b ) × y × k 2 → x × k 1 = y × k 2 gcd(a,b) \times x \times k_1 = gcd(a,b) \times y \times k_2 \to x \times k_1 = y \times k_2 g c d ( a , b ) × x × k 1 = g c d ( a , b ) × y × k 2 → x × k 1 = y × k 2 , 已经知道x , y x,y x , y 互质.根据上面已经证明的部分,得到k 1 = y , k 2 = x k_1 = y ,k_2 =x k 1 = y , k 2 = x 这个时候才能使用l c m ( a , b ) lcm(a,b) l c m ( a , b ) 最小
所以g c d ( a , b ) × l c m ( a , b ) = g c d ( a , b ) × a × y = g c d ( a , b ) × b × x = a × b gcd(a,b) \times lcm(a,b) = gcd(a,b) \times a \times y = gcd(a,b) \times b \times x = a \times b g c d ( a , b ) × l c m ( a , b ) = g c d ( a , b ) × a × y = g c d ( a , b ) × b × x = a × b .证明完毕.
其时这个证明起始思想来源于 算术基本定理,通过观察l c m ( a , b ) × g c d ( a , b ) lcm(a,b) \times gcd(a,b) l c m ( a , b ) × g c d ( a , b ) 各自怎么拆分得到a × b a \times b a × b 的形式,再加上任意问题都是由简单问题组成 的观点递归分解证明2,我们得到了这个结论.
又同样说明了: 当我们需要证明一个结论时,先要观察数据 ,这个步骤在<<怎样解题>>这本书叫做熟悉题目,深入理解题目,寻求有用的思路,探索法
三 算术基本定理
任何大于1的整数都可以唯一分解成素因数乘积的形式
n = p 1 a 1 × p 2 a 2 × ⋯ × p k a k
n = p_1 ^ {a_1} \times p_2 ^ {a_2} \times \cdots \times p_k ^ {a_k}
n = p 1 a 1 × p 2 a 2 × ⋯ × p k a k
证明: 1. 存在性 2. 唯一性
存在性: 若一个数字n,不是素数,可以分解成a × b a \times b a × b ,其中a是一个素数,b可以继续分解.
唯一性: 见书上P13. 先假设存在.然后根据素数不可能分解的性质.证明p 1 = q 1 p_1 = q_1 p 1 = q 1 .然后递归.
第二讲 同余与同余方程
利用同余关系进一步讨论了整除
剩余类. 对同一个剩余类的数引入 加法,乘法.
一 同余
引入的同余的概念:
a ≡ b ( m o d n )
a \equiv b \pmod{n}
a ≡ b ( mod n ) a ≡ b ( m o d n ) ⇔ n ∣ a − b (a)
a \equiv b \pmod{n} \Leftrightarrow n \mid a - b \tag a
a ≡ b ( mod n ) ⇔ n ∣ a − b ( a ) 感性的理解: 长度为a,b的木棍对于n都有相同的余数.也就多出来的长度一样.相减后,去除了那个多的部分.
证明: 写成带余除法a = n q + r , b = n ′ q ′ + r ′ a = nq+r,b = n'q'+r' a = n q + r , b = n ′ q ′ + r ′
必要性: 根据前提显然r = r ′ r = r' r = r ′ ,a − b = n ( q − q ′ ) → n ∣ a − b a - b = n(q-q') \to n \mid a - b a − b = n ( q − q ′ ) → n ∣ a − b .
充分性: n ∣ a − b → n ∣ n ( q − q ′ ) + r − r ′ → n ∣ r − r ′ n\mid a-b \to n \mid n(q-q')+r - r' \to n \mid r - r' n ∣ a − b → n ∣ n ( q − q ′ ) + r − r ′ → n ∣ r − r ′ ,根据带余除法的定义,得到− n < r − r ′ < n → r − r ′ = 0 → r = r ′ -n < r - r' < n \to r - r' = 0 \to r = r' − n < r − r ′ < n → r − r ′ = 0 → r = r ′ ,得证: a ≡ b ( m o d n ) a \equiv b \pmod{n} a ≡ b ( mod n ) .
补充:
和的模等于模的和 ( a + b ) ≡ ( a ( m o d n ) + b ( m o d n ) ) ( m o d n ) (a + b) \equiv (a \pmod{n} + b \pmod{n}) \pmod{n} ( a + b ) ≡ ( a ( mod n ) + b ( mod n )) ( mod n )
积的模等于模的积 ( a b ) ≡ ( a ( m o d n ) b ( m o d n ) ) ( m o d n ) (ab) \equiv (a \pmod{n}b \pmod{n}) \pmod{n} ( ab ) ≡ ( a ( mod n ) b ( mod n )) ( mod n )
性质:
反身性,自反性
交换律,对称性
传递性
若a ≡ b ( m o d n ) , c ≡ d ( m o d n ) a \equiv b \pmod{n},c \equiv d \pmod{n} a ≡ b ( mod n ) , c ≡ d ( mod n ) ,
a + c ≡ b + d ( m o d n ) a+c \equiv b+d \pmod{n} a + c ≡ b + d ( mod n ) 可加性
a c ≡ b d ( m o d n ) ac \equiv bd \pmod{n} a c ≡ b d ( mod n ) 可乘性
k a ≡ k b ( m o d n ) ka \equiv kb \pmod{n} ka ≡ kb ( mod n ) 可乘性推论
a k ≡ b k ( m o d n ) a^k \equiv b^k \pmod{n} a k ≡ b k ( mod n ) 可乘性推论
证明1: 必要性
a ≡ b ( m o d n ) , c ≡ d ( m o d n ) → n ∣ a − b , n ∣ c − d → k 1 n = a − b , k 2 n = c − d → ( k 1 + k 2 ) n = ( a + c ) − ( b + d ) → n ∣ ( a + c ) − ( b + d ) → a + c ≡ b + d ( m o d n )
\begin{aligned}
a \equiv b \pmod{n},c \equiv d \pmod{n} &\to n \mid a -b ,n \mid c-d \\
& \to k_1 n = a -b , k_ 2 n = c-d \\
& \to (k_1 + k_2) n = (a+c) - (b+d) \\
&\to n \mid (a+c) - (b+d) \\
&\to a+c \equiv b+d \pmod{n}
\end{aligned}
a ≡ b ( mod n ) , c ≡ d ( mod n ) → n ∣ a − b , n ∣ c − d → k 1 n = a − b , k 2 n = c − d → ( k 1 + k 2 ) n = ( a + c ) − ( b + d ) → n ∣ ( a + c ) − ( b + d ) → a + c ≡ b + d ( mod n ) 充分性只要反过来
证明2: 必要性
a ≡ b ( m o d n ) , c ≡ d ( m o d n ) → n ∣ a − b , n ∣ c − d → k 1 n = a − b , k 2 n = c − d → c k 1 n = a c − b c , b k 2 n = b c − b d → ( c k 1 + b k 2 ) n = a c − b d → a c ≡ b d ( m o d n )
\begin{aligned}
a \equiv b \pmod{n},c \equiv d \pmod{n} &\to n \mid a -b ,n \mid c-d \\
& \to k_1 n = a -b , k_ 2 n = c-d \\
& \to c k_1 n = ac - bc , b k_ 2 n = bc-bd \\
& \to (ck_1 + bk_2) n = ac - bd \\
& \to ac \equiv bd \pmod{n}
\end{aligned}
a ≡ b ( mod n ) , c ≡ d ( mod n ) → n ∣ a − b , n ∣ c − d → k 1 n = a − b , k 2 n = c − d → c k 1 n = a c − b c , b k 2 n = b c − b d → ( c k 1 + b k 2 ) n = a c − b d → a c ≡ b d ( mod n ) 消费律: a c ≡ b c ( m o d n ) ∧ g c d ( c , n ) = 1 → a ≡ b ( m o d n ) ac \equiv bc \pmod{n} \land gcd(c,n) = 1 \to a \equiv b \pmod{n} a c ≡ b c ( mod n ) ∧ g c d ( c , n ) = 1 → a ≡ b ( mod n )
证明:
根据同余与整除的等价关系,得到
a c ≡ b c ( m o d n ) ⇔ n ∣ c ( b − a ) → c ( b − a ) n ∈ Z → n ∣ b − a 因为 g c d ( c , n ) = 1 → a ≡ b ( m o d n )
\begin{aligned}
ac \equiv bc \pmod{n} & \Leftrightarrow n \mid c(b-a) \\
& \to \frac{c(b-a)}{n} \in \mathbb{Z} \\
& \to n \mid b-a \quad \text{因为} gcd(c,n) = 1 \\
& \to a \equiv b \pmod{n}
\end{aligned}
a c ≡ b c ( mod n ) ⇔ n ∣ c ( b − a ) → n c ( b − a ) ∈ Z → n ∣ b − a 因为 g c d ( c , n ) = 1 → a ≡ b ( mod n ) 消费律是充分必要的.
消去律其实是下面公式的特例,这个公式出现在B版的P24.
a c ≡ b c ( m o d n ) ⇔ a ≡ b ( m o d n g c d ( c , n ) )
ac \equiv bc \pmod{n} \Leftrightarrow a \equiv b \pmod{ \frac{n}{gcd(c,n)}}
a c ≡ b c ( mod n ) ⇔ a ≡ b ( mod g c d ( c , n ) n ) 证明与上面其实是一样的.
这里只证明必要性:
设c = k 1 ⋅ ( c , n ) , n = k 2 ⋅ ( c , n ) c = k_1 \cdot (c,n),n = k_2 \cdot (c,n) c = k 1 ⋅ ( c , n ) , n = k 2 ⋅ ( c , n ) ,那么k 2 = n ( c , n ) k_2 = \frac{n}{(c,n)} k 2 = ( c , n ) n .
a c ≡ b c ( m o d n ) ⇔ n ∣ c ( b − a ) → c ( b − a ) n ∈ Z → k 1 ⋅ ( c , n ) ⋅ ( b − a ) k 2 ⋅ ( c , n ) ∈ Z → k 1 ⋅ ( b − a ) k 2 ∈ Z 因为 ( k 1 , k 2 ) = 1 , 就变得和上面一样了 → k 2 ∣ b − a → a ≡ b ( m o d k 2 = n ( c , n ) ) \begin{aligned}
ac \equiv bc \pmod{n} &\Leftrightarrow n \mid c(b-a) \\
& \to \frac{c(b-a)}{n} \in \mathbb{Z} \\
& \to \frac{k_1 \cdot (c,n)\cdot (b-a)}{k_2 \cdot (c,n)} \in \mathbb{Z} \\
& \to \frac{k_1 \cdot (b-a)}{k_2} \in \mathbb{Z} \\
&\quad \text{因为} (k_1,k_2) = 1,\text{就变得和上面一样了}
& \to k_2 \mid b-a \\
& \to a \equiv b \pmod{k_2 = \frac{n}{(c,n)}} \\
\end{aligned} a c ≡ b c ( mod n ) ⇔ n ∣ c ( b − a ) → n c ( b − a ) ∈ Z → k 2 ⋅ ( c , n ) k 1 ⋅ ( c , n ) ⋅ ( b − a ) ∈ Z → k 2 k 1 ⋅ ( b − a ) ∈ Z 因为 ( k 1 , k 2 ) = 1 , 就变得和上面一样了 → a ≡ b ( mod k 2 = ( c , n ) n ) → k 2 ∣ b − a
二 剩余类及其运算
剩余类定义
代表元
公式形式a ≡ b ( m o d n ) ⇔ [ a ] = [ b ] a \equiv b \pmod{n} \Leftrightarrow [a] = [b] a ≡ b ( mod n ) ⇔ [ a ] = [ b ] 的解法
剩余类加法
剩余类乘法
零元
单位元
负元
逆元 : 若[ a ] [ b ] = [ b ] [ a ] = [ 1 ] [a][b] = [b][a] = [1] [ a ] [ b ] = [ b ] [ a ] = [ 1 ] ,记作a − 1 ≡ b ( m o d n ) a^{-1} \equiv b \pmod{n} a − 1 ≡ b ( mod n )
非零元[ a ] [a] [ a ] 有逆元的充分必要条件: g c d ( a , n ) = 1 gcd(a,n) = 1 g c d ( a , n ) = 1 ,也就是说任何素数都有逆元.
三 费马小定理与欧拉定理
先发现,后证明.
发现当m为素数时,a m ≡ a ( m o d m ) a^m \equiv a \pmod{m} a m ≡ a ( mod m ) .其中a < m a < m a < m ,根据消去律可知a m − 1 ≡ 1 ( m o d m ) a^{m-1} \equiv 1 \pmod{m} a m − 1 ≡ 1 ( mod m )
写一下代码求一下
def is_prime ( n) :
if n < 2 :
return False
for i in range ( 2 , int ( n** 0.5 ) + 1 ) :
if n % i == 0 :
return False
return True
while True :
m = int ( input ( "请输入一个素数m:" ) )
if is_prime( m) :
break ;
else :
print ( "输入的不是素数,请重新输入!" )
for a in range ( 1 , m) :
a_pow_m = a** m
a_pow_m_mod_m = a_pow_m % m
print ( f" { a} ^ { m} = { a_pow_m} mod { m} = { a_pow_m_mod_m} " )
复制
费马小定理
若p p p 是素数,则a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod{p} a p − 1 ≡ 1 ( mod p )
也就是说a p − 2 a^{p-2} a p − 2 的是a a a 的逆元.
证明:
a , 2 a , 3 a , ⋯ , ( m − 1 ) a a,2a,3a,\cdots ,(m-1)a a , 2 a , 3 a , ⋯ , ( m − 1 ) a 对m取余数两两不等,反证法x a ≡ y a ( m o d m ) → x ≡ y ( m o d m ) xa \equiv ya \pmod {m} \to x \equiv y \pmod {m} x a ≡ y a ( mod m ) → x ≡ y ( mod m ) 显然不可能,所以这些数是m m m 完全剩余类
同样1 , 2 , 3 , ⋯ , m − 1 1,2,3,\cdots,m-1 1 , 2 , 3 , ⋯ , m − 1 也是m m m 完全剩余类
所以
a m − 1 ( m − 1 ) ! ≡ ( m − 1 ) ! ( m o d m )
a^{m-1}(m-1)! \equiv (m-1)! \pmod {m}
a m − 1 ( m − 1 )! ≡ ( m − 1 )! ( mod m ) 又因为g c d ( ( m − 1 ) ! , m ) = 1 gcd((m-1)!,m) = 1 g c d (( m − 1 )! , m ) = 1 ,根据消去律得到
a m − 1 ≡ 1 ( m o d m )
a^{m-1} \equiv 1 \pmod {m}
a m − 1 ≡ 1 ( mod m ) 欧拉定理
欧拉函数
ψ ( n ) \psi(n) ψ ( n ) 表示1 , 2 , ⋯ , n − 1 1,2,\cdots,n-1 1 , 2 , ⋯ , n − 1 中与n互质的个数,称为欧拉函数
互素剩余类
完全剩余系(集合)
简化剩余系(集合)
g c d ( m 1 , m 2 ) = 1 → ψ ( m 1 m 2 ) = ψ ( m 1 ) ⋅ ψ ( m 2 )
gcd(m_1,m_2) = 1 \to \psi(m_1m_2) = \psi(m_1) \cdot \psi(m_2)
g c d ( m 1 , m 2 ) = 1 → ψ ( m 1 m 2 ) = ψ ( m 1 ) ⋅ ψ ( m 2 )
欧拉定理
m > 1 ∧ g c d ( a , m ) = 1 → a ψ ( m ) ≡ 1 ( m o d m )
m> 1 \land gcd(a,m) = 1 \to a^{\psi(m)} \equiv 1 \pmod{m}
m > 1 ∧ g c d ( a , m ) = 1 → a ψ ( m ) ≡ 1 ( mod m ) 证明方法与费马小定理本质是一样的.但这要先用到x 1 , x 2 , ⋯ , x ψ ( m ) x_1,x_2,\cdots,x_{\psi(m)} x 1 , x 2 , ⋯ , x ψ ( m ) 是模m m m 的一个简化剩余系,则k x 1 , k x 2 , ⋯ , k x ψ ( m ) kx_1,kx_2,\cdots,kx_{\psi(m)} k x 1 , k x 2 , ⋯ , k x ψ ( m ) 也是模m m m 的一个简化剩余系(用到了抽屉原理).
四 一次同余方程
五 拉格朗日插值法和孙子定理
六 弃九验算法
第三讲 一次不定方程
第四讲 数论在密码中的应用
裴蜀定理
威尔逊定理
威尔逊定理
在初等数论中,威尔逊定理给出了判定一个自然数是否为质数的充分必要条件。即:当且仅当
p {\displaystyle p} p 为质数时:
( p − 1 ) ! ≡ − 1 ( m o d p )
(p-1)! \quad \equiv \ -1 \pmod {p}
( p − 1 )! ≡ − 1 ( mod p )
这里只证明充分性.
这里需要证明一个前置的定理: 当p p p 是素数,n 1 ∈ [ 1 , p − 1 ] n_1 \in [1,p-1] n 1 ∈ [ 1 , p − 1 ] ,必然存在唯一逆元n 2 ∈ [ 1 , p − 1 ] n_2 \in [1,p-1] n 2 ∈ [ 1 , p − 1 ] ,使得n 1 n 2 ≡ 1 ( m o d p ) n_1n_2 \equiv 1 \pmod {p} n 1 n 2 ≡ 1 ( mod p )
证明存在性:
n 1 n 2 ≡ 1 ( m o d p ) ⇔ p ∣ n 1 n 2 − 1 ⇔ k p = n 1 n 2 − 1 ⇔ k p − n 1 n 2 = 1 ⇔ k p + n 1 n 2 = 1
\begin{aligned}
n_1n_2 \equiv 1 \pmod {p} &\Leftrightarrow p \mid n_1n_2 - 1 \\
& \Leftrightarrow kp = n_1n_2 - 1 \\
& \Leftrightarrow kp - n_1n_2 = 1 \\
& \Leftrightarrow kp + n_1n_2 = 1 \\
\end{aligned}
n 1 n 2 ≡ 1 ( mod p ) ⇔ p ∣ n 1 n 2 − 1 ⇔ k p = n 1 n 2 − 1 ⇔ k p − n 1 n 2 = 1 ⇔ k p + n 1 n 2 = 1 根据裴蜀定理,因为g c d ( n 1 , p ) = 1 gcd(n1,p) = 1 g c d ( n 1 , p ) = 1 ,必然存在,一对整数( k , n 2 ) (k,n_2) ( k , n 2 ) 使得k p + n 1 n 2 = 1 kp + n_1n_2 = 1 k p + n 1 n 2 = 1 成立
证明唯一性: 这里用到了群论逆元唯一性的证明:
设存在b , b ′ → a b ≡ 1 ( m o d p ) ∧ a b ′ ≡ 1 ( m o d p ) b,b' \to ab \equiv 1 \pmod {p} \land ab' \equiv 1 \pmod {p} b , b ′ → ab ≡ 1 ( mod p ) ∧ a b ′ ≡ 1 ( mod p )
a b ≡ a b ′ ( m o d p ) → g c d ( a , b ) = 1 b ≡ b ′ ( m o d p )
\begin{aligned}
ab \equiv ab' \pmod {p} \xrightarrow{ gcd(a,b) = 1} b \equiv b' \pmod {p} \\
\end{aligned}
ab ≡ a b ′ ( mod p ) g c d ( a , b ) = 1 b ≡ b ′ ( mod p ) 可能存在一个a ∈ [ 1 , p − 1 ] a \in [1,p-1] a ∈ [ 1 , p − 1 ] ,它的逆元是自己本身.
a 2 ≡ 1 ( m o d p ) ⇔ p ∣ a 2 − 1 ⇔ p ∣ ( a − 1 ) ( a + 1 ) ⇔ a ∈ [ 1 , p − 1 ] a = 1 ∨ a = p − 1
\begin{aligned}
& a^2 \equiv 1 \pmod p \\
& \Leftrightarrow p \mid a^2 - 1 \\
& \Leftrightarrow p \mid (a-1)(a+1) \\
& \xLeftrightarrow{a \in [1,p-1]} a = 1 \lor a = p-1
\end{aligned}
a 2 ≡ 1 ( mod p ) ⇔ p ∣ a 2 − 1 ⇔ p ∣ ( a − 1 ) ( a + 1 ) a ∈ [ 1 , p − 1 ] a = 1 ∨ a = p − 1 于是我们可以这样说: 在x ∈ [ 1 , p − 1 ] x \in [1,p-1] x ∈ [ 1 , p − 1 ] 中,除了1 , p − 1 1,p-1 1 , p − 1 外,[ 2 , p − 2 ] [2,p-2] [ 2 , p − 2 ] 这些数都存在一个对应的逆元,且两两配对.所以
∏ i = 2 p − 2 x ≡ 1 ( m o d p ) → 1 ≡ 1 ( m o d p ) ∏ i = 1 p − 2 x ≡ 1 ( m o d p ) → ( p − 1 ) ≡ ( p − 1 ) ( m o d p ) ∏ i = 1 p − 2 x ⋅ p − 1 ≡ p − 1 ( m o d p ) → ( p − 1 ) ! ≡ − 1 ( m o d p )
\begin{aligned} \prod_{i=2}^{p-2} x \equiv 1 \pmod {p}
&\xrightarrow{ 1 \equiv 1 \pmod p} \prod_{i=1}^{p-2} x \equiv 1 \pmod {p} \\
&\xrightarrow{ (p-1) \equiv (p-1) \pmod p} \prod_{i=1}^{p-2} x \cdot p-1 \equiv p-1 \pmod {p} \\
&\rightarrow (p-1)! \quad \equiv -1 \pmod {p} \\
\end{aligned}
i = 2 ∏ p − 2 x ≡ 1 ( mod p ) 1 ≡ 1 ( mod p ) i = 1 ∏ p − 2 x ≡ 1 ( mod p ) ( p − 1 ) ≡ ( p − 1 ) ( mod p ) i = 1 ∏ p − 2 x ⋅ p − 1 ≡ p − 1 ( mod p ) → ( p − 1 )! ≡ − 1 ( mod p ) 参考: https://zh.wikipedia.org/wiki/威尔逊定理
二元一次方程
有解的充要条件
a x + b x = c (1)
ax + bx =c \tag 1
a x + b x = c ( 1 ) 上式有解的充要条件是( a , b ) ∣ c (a,b) | c ( a , b ) ∣ c
证明必要性:因为有解,设解为x 0 , y 0 x_0,y_0 x 0 , y 0
k 1 ( a , b ) x 0 + k 2 ( a , b ) y 0 = c → ( a , b ) ( k 1 x 0 + k 2 y 0 ) = c → ( a , b ) ∣ c
\begin{aligned}
& k_1 (a,b) x_0 + k_2 (a,b) y_0 = c \\
& \to (a,b) (k_1 x_0 + k_2 y_0) = c \\
&\to (a,b) | c
\end{aligned}
k 1 ( a , b ) x 0 + k 2 ( a , b ) y 0 = c → ( a , b ) ( k 1 x 0 + k 2 y 0 ) = c → ( a , b ) ∣ c 充分性:
根据裴蜀定理,必然存在一给整数x 0 , y 0 x_0,y_0 x 0 , y 0 ,使得
a x 0 + b y 0 = ( a , b )
a x_0 + b y_0 = (a,b)
a x 0 + b y 0 = ( a , b ) 设( a , b ) ⋅ k = c → k = c ( a , b ) (a,b) \cdot k = c \to k = \frac{c}{(a,b)} ( a , b ) ⋅ k = c → k = ( a , b ) c ,则上式两边同时乘以k k k 得到: k a x 0 + k b y 0 = c → k a x_0 + k b y_0 = c \to ka x 0 + kb y 0 = c →
剩余系
完全剩余系
模m m m 的每个剩余类中各取一个数组成的一个集合
简化剩余系
模m m m 的互素类中各取一个数组成的一个集合
欧拉函数
证明欧拉函数需要先证明这几个定理
定理1: 剩余系集合相等
设m ∈ z m\in \mathbb{z} m ∈ z ,k , l k,l k , l 是固定的值,也是整数,且( k , m ) = 1 (k,m) = 1 ( k , m ) = 1
当x遍历模m的一个完全剩余系时,f ( x ) = k x + l f(x) = kx + l f ( x ) = k x + l 也遍历模m的一个完全剩余系
当x遍历模m的一个简化剩余系时,f ( x ) = k x f(x) = kx f ( x ) = k x 也遍历模m的一个简化剩余系
证明(1): 本质是证明两个集合A , B A,B A , B 相等,也就是证明两个集合里的元素完全一样.我想到了两种方法.
设集合A = { x 0 , x 1 , ⋯ , x m − 1 } A = \{x_0,x_1 ,\cdots, x_{m-1} \} A = { x 0 , x 1 , ⋯ , x m − 1 } ,映射f ( x ) = ( k x + l ) m o d m , x i n A f(x) = (kx + l) \mod m, x\ in A f ( x ) = ( k x + l ) mod m , x in A ,f ( x ) f(x) f ( x ) 的像是集合B B B
本质是证明f ( x ) f(x) f ( x ) 是双射. 满射是显然的(注意这里,可以想到集合B的元素是mod来的,所以B一定是A的子集),下面只证明单射就可以了(两者的数量一样)
反证法,设x i ≠ x j x_i \neq x_j x i = x j
k x i + l ≡ k x j + l ( m o d m ) → k x i ≡ k x j ( m o d m ) → x i ≡ x j ( m o d m ) → x i = x j
\begin{aligned}
& kx_i + l \equiv kx_j + l \pmod m \\
&\to kx_i \equiv kx_j \pmod m \\
&\to x_i \equiv x_j \pmod m \\
&\to x_i = x_j
\end{aligned}
k x i + l ≡ k x j + l ( mod m ) → k x i ≡ k x j ( mod m ) → x i ≡ x j ( mod m ) → x i = x j 简单一点,可以先证明k x i m o d m kx_i \mod m k x i mod m 是完全剩余系,然后证明x i + l x_i + l x i + l 本质是在一个圈上的移动,所以不会重复.
证明(2): 同理,证明f ( x ) f(x) f ( x ) 是双射. 满射是显然的.下面只证明单射就可以了
设集合C = { x 1 , x 2 , ⋯ , x ψ ( m ) ∣ ( x i , m ) = 1 } ⊂ A C = \{x_1,x_2,\cdots,x_{\psi(m)} | (x_i,m) = 1\} \subset A C = { x 1 , x 2 , ⋯ , x ψ ( m ) ∣ ( x i , m ) = 1 } ⊂ A ,映射f ( x ) = k x m o d m , x ∈ C f(x) = kx \mod m, x\in C f ( x ) = k x mod m , x ∈ C ,f ( x ) f(x) f ( x ) 的像是集合D D D
现在要证明集合C = D C= D C = D ,需要证明
数量一样,也就是单射,这里参考(1)的证明方法
我们知道D ⊂ A D \subset A D ⊂ A ,这里只需要证明D满足C从A中选元素的条件即可,即( k x i , m ) = 1 (kx_i,m) = 1 ( k x i , m ) = 1 ,根据算术基本定理,我们知道( k x i , m ) = ( k , m ) ( x i , m ) = 1 (kx_i,m) = (k,m)(x_i,m) = 1 ( k x i , m ) = ( k , m ) ( x i , m ) = 1 ,所以D满足条件,所以D ⊂ C D \subset C D ⊂ C ,所以C = D C = D C = D
定理2:
设( m 1 , m 2 ) = 1 (m_1,m_2) = 1 ( m 1 , m 2 ) = 1
当x 1 , x 2 x_1,x_2 x 1 , x 2 遍历模m 1 , m 2 m_1,m_2 m 1 , m 2 的完全剩余系时,m 2 x + m 1 y m2x+m_1y m 2 x + m 1 y 也遍历模m 1 m 2 m_1m_2 m 1 m 2 的完全剩余系
当x 1 , x 2 x_1,x_2 x 1 , x 2 遍历模m 1 , m 2 m_1,m_2 m 1 , m 2 的简化剩余系时,m 2 x + m 1 y m2x+m_1y m 2 x + m 1 y 也遍历模m 1 m 2 m_1m_2 m 1 m 2 的简化剩余系