Content
Congruence
两个整数之间的模 m 同余关系通过整除来定义:
m∣a−b⟺a≡b(modm)即如果 m 整除 a 和 b,称 a 和 b 模 m 同余。
Properties
整数之间的同余关系”≡”和实数上的相等关系”=”存在众多相似之处。除了作为一个等价关系所具备的自反性(reflexive)、对称性(symmetric)和传递性(transitive)之外,假如已知
a≡b(modm) and c≡d(modm)容易证明
a±c≡b±d(modm) ac≡bd(modm) an≡bn(modm)Successive squaring
虽然没有找到这个名词的中文翻译,但我猜测这就是中文里的“快速幂取模”,有的文章把这个称作重复乘方法(repeated squaring)。重复乘方法是一种便于快速计算高次幂取模的算法,即计算以下模 m 同余
an(modm)考虑整数 n 的二进制形式 n=b0b1b2…bk(2),bi=0 or 1
n=b0+b1⋅2+b2⋅22+…+bk⋅2k an=ab0+b1⋅2+b2⋅22+…+bk⋅2k=ab0⋅ab1⋅2⋅ab2⋅22⋅…⋅abk⋅2k二进制表示整数的好处在这里体现出来了:一方面 2i 次幂 可以从上一次的结果计算得到,因为 (a2i−1)2=a2⋅2i−1=a2i。另一方面整数二进制表示的数位只有 0 和 1,和其它进制相比做乘法的次数更少。比起简单地做 n 次乘法,这种方法将时间复杂度降低到 O(logn)。
Linear congruence
对于线性同余方程
ax=c(modm) 因为
m∣(ax−c)⟹my=ax−c 我们可以将它转化为 ax+my=c 的形式然后应用扩展欧几里德算法和线性方程解法来解决。关于 ax≡c(modm) 的解的个数,设 x0,x1 是 ax≡c(modm) 的两个解,令 g=gcd(a,m) ,
ax0≡ax1(modm)⟹mg∣ag(x1−x0)因为 gcd(mg,ag)=1,由欧几里德引理得到mg∣x1−x0,应用解线性方程的方法
xi=x0+k⋅mgk∈Z∗ and 0≤k<g因为 xi<x0+kmg,这意味着 ax≡c(modm) 有 g=gcd(a,m) 个 模 m 两两不同余 的解。
Code snippets
1
2
3
4
5
6
def linear_congruence(a,c,m):
g, x, y = gcd(a,m)
m = abs(m)
if c % g == 0:
x *= c // g
return [(x + k * (m // g)) % m for k in range(g)]
Modular multiplicative inverse
已知整数 a,m,满足 ax≡1(modm) 的整数 x 称为 a 的模 m 乘法逆元(modular multiplicative inverse),写作 x≡a−1(modm)。应用前面解线性同余方程的方法可以立即得到以下结论:
- 假如 gcd(a,m)=1,而且 a 的模 m 乘法逆元只有一个,即由 a 和 a−1(modp) 各自组成的集合之间存在一一对应关系
- 换言之若 gcd(a,m)>1,那么 a 的模 m 乘法逆元不存在,即不存在整数 x 满足 ax≡1(modp);
在同余的语境下,模 m 乘法逆元运算可以类比实数上的倒数运算,它们都有着类似的性质:元素 a 和它的逆元作乘法运算的结果是 1 以及对应逆元只有 1 个。
以分数形式出现的模算数也是有意义,比如
x≡23(mod5)⟹3x≡2(mod5)⟹x≡4(mod5)又如 x≡1a≡a−1(modm),它的意义是 a 的模 m 乘法逆元而不是倒数;而且 (a−1)n≡(an)−1(modm),这是因为
ax≡1(modm)⟹{x≡a−1(modm)⟹xn≡(a−1)n(modm)anxn≡1(modm)⟹xn≡(an)−1(modm)⟹(a−1)n≡(an)−1(modm)Polynomial roots mod p theorem
给定素数 p,整数 d≥1 和系数为整数的多项式
f(x)=a0xd+a1xd−1+…+ad其中 p∤a0。然后同余式
f(x)≡0(modp)最多只有 d 个模 p 互不同余的解。
wikipedia 的拉格朗日定理条目上边有更准确的表达,书中的表述可以视为拉格朗日定理在 p∤a0 下的特例:
if p is a prime number and f(x)∈Z[x] is a polynomial with integer coefficients, then either:
- every coefficient of f(x) is divided by p, or
- f(x)≡p0 has at most deg f(x) incongruent solutions.
Reduced residue system
已知集合 A 有 n 个元素而且两两模 n 不同余,称 A 为模 n 完全剩余系(complete residue system modulo n);而集合 B=r∣r∈A and gcd(r,n)=1 称为模 n 简化剩余系(缩系,reduced residue system modulo n)。
Lemma
-
给定素数 p 和任意整数 a 而且 p∤a,那么由 a,2a,3a,…,(p−1)a(modp)
构成的集合和 1,2,3,…,(p−1)(modp)
所构成的集合相等。
假设存在整数 i 和 j,1<i<j<p,满足 ia≡ja(modp),那么 p∣(i−j)a。因为 p 是素数而且 p∤a,由 欧几里德引理 可以知道 p∣(i−j)。又因为 i,j∈1,2,…,p−1,因此 i=j,这表明 a,2a,3a,…,(p−1)a 当中任意两个数模 p 不同余。
这表示给定模 p 缩系 B,对于满足 p∤a 的整数 a,C=ab∣b∈B 也是一个模 p 缩系。更一般地,这个性质体现在所有自然数 n 上,详见下一章[欧拉定理](/2018/10/04/AFINT-Chap-10~11/。
Fermat’s little theorem
- 假如 p 是素数,那么对于任意整数 a 而且 p∤a,都有
由已知集合
{a,2a,3a,…,(p−1)a}构成一个模 p 缩系,所以
a⋅2a⋅3a⋅…⋅(p−1)a≡1⋅2⋅3⋅…⋅(p−1)(modp)由于 gcd((p−1)!,p)=1,两边同时去掉 (p−1)! 得到
ap−1≡1(modp)值得注意的是,应用费马小定理可以 判别一个数是合数 ,但不能判别这个数是素数。这听上去有点矛盾:除了1之外,其他自然数要么是素数要么是合数,假如一个数不是合数,那么难道不是素数吗?
要回答这个问题就要仔细地重温一下离散数学的命题逻辑内容:原命题的真假性和逆命题(converse)的真假性没有必然关系,但是原命题和逆否命题(contrapositive)具有同样的真假性,由蕴涵等值式(material implication)
A→B⟺¬A∨B⟺¬(¬B)∨¬A⟺¬B→¬A费马小定理的逆否命题:对于整数m,假如 ∃ a∈N s.t.
am−1≢1(modm)那么 m 是合数。
Wilson’s theorem
威尔逊定理(Wilson’s theorem):
- 证明假如 p 是素数,那么 (p−1)!≡−1(modp)。
由线性同余方程的解可以知道当 p 是素数而且 p∤a 时,ax≡1(modp) 模 p 互不同余 的解只有一个。
除此之外,
x2≡1(modp)⟺(x−1)(x+1)≡0(modp) x≡1(modp)orx≡p−1(modp)换言之,当 a=1 or p−1,满足 ax≡1(modp) 的只有 x≡a(modm);在集合 A′=2,…,p−2 中的元素 a′,有且只有一个数 x∈A′ and x≠a′满足 a′x≡1(modp)。
假如素数 p>2,p−1 是偶数,对每一个数 a 都能找到唯一一个数 x 满足 ax≡1(modp)。所以
(p−1)!≡1⋅2x1⋅3x2⋅…⋅(p−2)xp−3⋅(p−1)≡p−1≡−1(modp)所以当 p 为素数,
(p−1)!≡−1(modp)Carmichael numbers
满足 am−1≡1(modm),gcd(a,m)=1 的合数 m 被称作卡迈克尔数(Carmichael numbers)。最小的卡迈克尔数是 561=3×11×17。
Exercises
8.4
(c) & (d)
- 整数 a 能被 3 整除当且仅当其数字的和能够被 3 整除。
因为 10≡1(mod3)⟹10n≡1(mod3)
an10n+an−110n−1+…+a0≡an+an−1+…+a0(mod3)(e)
- 整数 a 能被 11 整除当且仅当其数字的交错和(Alternating Sum)能够被 3 整除。
因为
10≡−1(mod11)102≡1(mod11)所以
n∑i=0a2i+1102i+1≡10n∑i=0a2i+1≡−n∑i=0a2i+1(mod11) n∑i=0a2i102i≡n∑i=0a2i(mod11) n∑i=0ai10i≡n∑i=0a2i−n∑i=0a2i+1(mod11)9.3
(a) && (b)
- 证明假如 m 是合数,那么 (m−1)!≡0(modm)。
由算术基本定理可知,
当 m=pk,由于 k 可以写成2的幂的和,k=k1+k2+…+kn, ka=2i, ka≠kb。因此
m=pk=pk1+k2+…+kn=pk1pk2…pkn 1<pk1<pk2<…<pkn<m ,pka∈{1,2,…m−1} (m−1)!=C⋅pk1pk2…pkn=Mm所以 m∣(m−1)!,即 (m−1)!≡0(modm)。
当 m=pk11pk22…pknn,一定有 1<pk11<pk22<…<pknn<m,pknn∈{1,2,…m−1}
所以 m∣(m−1)!,即 (m−1)!≡0(modm)。