Loading [MathJax]/jax/output/SVG/jax.js

A Friendly Introduction to Number Theory Chapter 8~9

同余(Congruences),快速幂取模和费马小定理(Fermat's little theorem)

Posted by Kennico on October 4, 2018

Content

Congruence

两个整数之间的模 m 同余关系通过整除来定义:

mabab(modm)

即如果 m 整除 ab,称 abm 同余。

Properties

整数之间的同余关系””和实数上的相等关系”=”存在众多相似之处。除了作为一个等价关系所具备的自反性(reflexive)、对称性(symmetric)和传递性(transitive)之外,假如已知

ab(modm) and cd(modm)

容易证明

a±cb±d(modm) acbd(modm) anbn(modm)

Successive squaring

虽然没有找到这个名词的中文翻译,但我猜测这就是中文里的“快速幂取模”,有的文章把这个称作重复乘方法(repeated squaring)。重复乘方法是一种便于快速计算高次幂取模的算法,即计算以下模 m 同余

an(modm)

考虑整数 n 的二进制形式 n=b0b1b2bk(2)bi=0 or 1

n=b0+b12+b222++bk2k an=ab0+b12+b222++bk2k=ab0ab12ab222abk2k

二进制表示整数的好处在这里体现出来了:一方面 2i 次幂 可以从上一次的结果计算得到,因为 (a2i1)2=a22i1=a2i。另一方面整数二进制表示的数位只有 01,和其它进制相比做乘法的次数更少。比起简单地做 n 次乘法,这种方法将时间复杂度降低到 O(logn)

Linear congruence

对于线性同余方程

ax=c(modm) 因为

m(axc)my=axc 我们可以将它转化为 ax+my=c 的形式然后应用扩展欧几里德算法和线性方程解法来解决。关于 axc(modm) 的解的个数,设 x0,x1axc(modm) 的两个解,令 g=gcd(a,m)

ax0ax1(modm)mgag(x1x0)

因为 gcd(mg,ag)=1,由欧几里德引理得到mgx1x0,应用解线性方程的方法

xi=x0+kmgkZ and 0k<g

因为 xi<x0+kmg,这意味着 axc(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,满足 ax1(modm) 的整数 x 称为 a 的模 m 乘法逆元(modular multiplicative inverse),写作 xa1(modm)。应用前面解线性同余方程的方法可以立即得到以下结论:

  1. 假如 gcd(a,m)=1,而且 a 的模 m 乘法逆元只有一个,即由 aa1(modp) 各自组成的集合之间存在一一对应关系
  2. 换言之若 gcd(a,m)>1,那么 a 的模 m 乘法逆元不存在,即不存在整数 x 满足 ax1(modp)

在同余的语境下,模 m 乘法逆元运算可以类比实数上的倒数运算,它们都有着类似的性质:元素 a 和它的逆元作乘法运算的结果是 1 以及对应逆元只有 1 个。

以分数形式出现的模算数也是有意义,比如

x23(mod5)3x2(mod5)x4(mod5)

又如 x1aa1(modm),它的意义是 a 的模 m 乘法逆元而不是倒数;而且 (a1)n(an)1(modm),这是因为

ax1(modm){xa1(modm)xn(a1)n(modm)anxn1(modm)xn(an)1(modm)(a1)n(an)1(modm)

Polynomial roots mod p theorem

给定素数 p,整数 d1 和系数为整数的多项式

f(x)=a0xd+a1xd1++ad

其中 pa0。然后同余式

f(x)0(modp)

最多只有 d 个模 p 互不同余的解。

wikipedia 的拉格朗日定理条目上边有更准确的表达,书中的表述可以视为拉格朗日定理在 pa0 下的特例:

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

已知集合 An 个元素而且两两模 n 不同余,称 A 为模 n 完全剩余系(complete residue system modulo n);而集合 B=rrA and gcd(r,n)=1 称为模 n 简化剩余系(缩系,reduced residue system modulo n)。

Lemma

  • 给定素数 p 和任意整数 a 而且 pa,那么由 a,2a,3a,,(p1)a(modp)

    构成的集合和 1,2,3,,(p1)(modp)

    所构成的集合相等。

假设存在整数 ij1<i<j<p,满足 iaja(modp),那么 p(ij)a。因为 p 是素数而且 pa,由 欧几里德引理 可以知道 p(ij)。又因为 i,j1,2,,p1,因此 i=j,这表明 a,2a,3a,,(p1)a 当中任意两个数模 p 不同余。

这表示给定模 p 缩系 B,对于满足 pa 的整数 aC=abbB 也是一个模 p 缩系。更一般地,这个性质体现在所有自然数 n 上,详见下一章[欧拉定理](/2018/10/04/AFINT-Chap-10~11/。

Fermat’s little theorem

  • 假如 p 是素数,那么对于任意整数 a 而且 pa,都有
ap11(modp)

由已知集合

{a,2a,3a,,(p1)a}

构成一个模 p 缩系,所以

a2a3a(p1)a123(p1)(modp)

由于 gcd((p1)!,p)=1,两边同时去掉 (p1)! 得到

ap11(modp)

值得注意的是,应用费马小定理可以 判别一个数是合数 ,但不能判别这个数是素数。这听上去有点矛盾:除了1之外,其他自然数要么是素数要么是合数,假如一个数不是合数,那么难道不是素数吗?

要回答这个问题就要仔细地重温一下离散数学的命题逻辑内容:原命题的真假性和逆命题(converse)的真假性没有必然关系,但是原命题和逆否命题(contrapositive)具有同样的真假性,由蕴涵等值式(material implication)

AB¬AB¬(¬B)¬A¬B¬A

费马小定理的逆否命题:对于整数m,假如  aN s.t.

am11(modm)

那么 m 是合数。

Wilson’s theorem

威尔逊定理(Wilson’s theorem):

  • 证明假如 p 是素数,那么 (p1)!1(modp)

线性同余方程的解可以知道当 p 是素数而且 pa 时,ax1(modp) p 互不同余 的解只有一个。

除此之外,

x21(modp)(x1)(x+1)0(modp) x1(modp)orxp1(modp)

换言之,当 a=1 or p1,满足 ax1(modp) 的只有 xa(modm);在集合 A=2,,p2 中的元素 a,有且只有一个数 xA and xa满足 ax1(modp)

假如素数 p>2p1 是偶数,对每一个数 a 都能找到唯一一个数 x 满足 ax1(modp)。所以

(p1)!12x13x2(p2)xp3(p1)p11(modp)

所以当 p 为素数,

(p1)!1(modp)

Carmichael numbers

满足 am11(modm),gcd(a,m)=1合数 m 被称作卡迈克尔数(Carmichael numbers)。最小的卡迈克尔数是 561=3×11×17

Exercises

8.4

(c) & (d)

  • 整数 a 能被 3 整除当且仅当其数字的和能够被 3 整除。

因为 101(mod3)10n1(mod3)

an10n+an110n1++a0an+an1++a0(mod3)

(e)

  • 整数 a 能被 11 整除当且仅当其数字的交错和(Alternating Sum)能够被 3 整除。

因为

101(mod11)1021(mod11)

所以

ni=0a2i+1102i+110ni=0a2i+1ni=0a2i+1(mod11) ni=0a2i102ini=0a2i(mod11) ni=0ai10ini=0a2ini=0a2i+1(mod11)

9.3

(a) && (b)

  • 证明假如 m 是合数,那么 (m1)!0(modm)

由算术基本定理可知,

m=pk,由于 k 可以写成2的幂的和,k=k1+k2++knka=2ikakb。因此

m=pk=pk1+k2++kn=pk1pk2pkn 1<pk1<pk2<<pkn<m ,pka{1,2,m1} (m1)!=Cpk1pk2pkn=Mm

所以 m(m1)!,即 (m1)!0(modm)

m=pk11pk22pknn,一定有 1<pk11<pk22<<pknn<m,pknn{1,2,m1}

所以 m(m1)!,即 (m1)!0(modm)