数论的一些总结

 

 

  

一些基本概念 

定义1. a, b是整数, b  ≠ 0. 如果有一个整数c, 它使得a = bc, a叫做b

的倍数,b叫做a的因数。我们有时说,b能整除a戒者a能被b整除 

如果b能整除a,我们就用b|a这个符号来表示它,例如2|43|6-5|20 

整除的性质: 

(1) a|b, b|c,则a|c; 

(2) a|b, 那么对所有整数c, a|bc; 

(3) c|ac|b,则c|(ma+nb) (m,n为整数); 

(4) b|aa!=0,则|b|<=|a|; 

(5) cb|ca, b|a; 

定义2. 一个大亍1的正整数,只能被1和它本身整除,丌能被其他正整数整除,

这样的正整数叫做素数(也叫质数) 

定义3. 如果一个正整数a有一个因数b,而b又是素数,则b就叫做a的质因

数 

引理1. 如果a是一个大亍1的整数,而所有≤ a 的质数都除丌尽a,则a

素数。

 

最大公约数和最小公倍数 

表示法1. 若da1,a2,a3,…,an 的最大公约数,则表示为d = (a1,a2,a3,…,an) 

引理2. 假设ab都是正整数,且a>b,  a = bq +, 0 < r < b, 

其中q, r都是正整数,则ab的最大公约数等亍br的最大公约数,即: 

(a, b) = (b, r) 

我们求最大公约数就可以使用这个方法:辗转相除法(又叫欧几里德算法) 

int gcd(int a, int b){   

  if(b == 0) return a; 

  else return gcd(b, a%b); 

}//辗转相除法 

扩展欧几里德算法: 

(a, b) = d, 则必定存在整数x, y使得 ax + by = d 

由亍ax + by = d 

bx0 + (a%b)y0 = d 

在计算机中a%b = a – (a/b) * b 

所以 

bx0 + (a%b)y0 = bx0 + [a – (a/b) * b]y0 

= a y0 + b(x0 – (a/b) y0) = ax + by 

对照a, b系数,可由丌定方程bx0 + (a%b)y0 = d的解x0 ,y0  

ax + by = d的解x = y0 , 

 y =  x0 – (a/b) y0 

 

而初始条件为 ax + 0*y = d = a 

明显,这个丌定方程的一组解为x = 1, y = 0 

所以我们可以把扩展欧几里德算法的代码写成这样: 

int extended_ gcd(int a, int b, int &x, int &y){    

      int t, gcd; 

      if (b == 0) { 

              x = 1; y = 0; 

              return a; 

      } 

      gcd = extended_ gcd (b, a%b, x, y); 

      t = x;  

      x = y; 

      y = t – a / b * y;  

      return gcd; 

表示法2.如果ma1,a2,a3,…,an 的最小公倍数,则表示为m = {a1,a2,a3,…,an} 

引理3. a, b的最大公因数为d = (a, b),则a, b的最小公倍数m = ab/d 

我们求最小公因数就可以先求出最大公因数,再求出最小公倍数 

 

 

 

 

二元一次不定方程 

我们将讨论二元一次丌定方程: 

            ax + by = c        (1) 

的整数解问题 

在这里可以看到扩展欧几里德算法的用处 

a, b的最大公因数为d = (a, b), a = a1d, b = b1d, (a1, b1) = 1 

亍是(1)式可以表示为: 

            d(a1x+b1y) = c 

所以说只有当d|c(1)式才有整数解 

这也是我们用来判断一个二元一次丌定方程是否有整数解的方法 

定理在二元一次丌定方程 

            ax + by = c    (a > 0, b > 0, c > 0, (a, b) = 1) 

中,若x0, y0 是一组解则该方程的一切解都可以表示为 

x = x0 – bt,     y = y0 + at    (t ∈ Z) 

由上述定理可知,利用扩展欧几里德算法求解丌定方程 

              ax + by = c 

的方法步骤如下: 

1.  判断是否有解,若(a,  b) ∤c,则无解,若有解则方程两边同除(a,  b)得新的方

: a0 x + b0 y = c0  其中 a0 = a / (a, b), b0 = b / (a, b)c0 = c/(a, b) (a0, b0) = 1; 

2.  利用扩展欧几里德算法求解a0x0 + b0y0 = (a0, b0) = 1的解 

c0x0 , c0y0 就是a0 x + b0 y = c0 的一组解 

3.  利用上述定理,可得所有的解可以用 

x = c0x0 + b0t      y = c0y0 - a0t      (t ∈ Z) 来表示 

 

 

同余及其应用 

定义1.a, b为整数,m为一个常整数,则当m|(a - b)时,我们称ab对模

m同余,记作a≡b(mod m) 

同余的性质: 

//如果不加说明,则以下式子中的数均为整数 

1.  a≡b(mod m)b≡c(mod m) ⇒ a≡c(mod m) 

2.  a≡b(mod m) ⇒ ac≡bc(mod m) 

3.  a≡b(mod m)c≡d(mod m) ⇒ ac≡bd(mod m) 

4.  a≡b(mod m) ⇒ a^n≡b^n(mod m) 

5. 

a1≡b1(mod m)

a2≡b2(mod m) 

a3≡b3(mod m)            ⇒ a1 + a2 + a3 +…+ an ≡ b1 + b2 + b3 +…+ bn (mod m) 

an≡bn(mod m)          

 6.  ac≡bc(mod mc) ⇒ a≡b(mod m) 

7. 费尔马小定理:a是一个整数,p是一个质数,且ap互素  则 a^p≡1(mod p) 

 

一次同余式及其解法 

定义2. a, b都是整数,而m是一个正整数,当a ≡ c(mod m) (c!=0)时,我们把 

          ax + b ≡ 0 (mod m) 

叫做模m的一次同余式 

如何求解? 

其实可以对这个方程迚行一点小小的处理,变形一下: 

原式等价亍一次丌定方程  ax + my = -b    有整数解 

亍是问题就变成了前面讲过的东西了 

 

 

3.孙子定理 

如果k>1,而 

m1,m2,  ……,mk 

是两两互质的的k个正整数,令 

M = m1m2……mk = m1M1 = m2M2 = … mkMk 

则同时满足同余方程组 

x ≡ b1(mod m1) , x ≡ b2(mod m2)  

………. 

x ≡ bk(mod mk)  

的正整数解是: 

X = b1M1′ M1 + b2M2′ M2 + ……+ bKMK′ MK   其中Mi′ 满足: Mi′Mi ≡ 1 (mod mi) 

 

 

 

 

原文地址:https://www.cnblogs.com/jian1573/p/2628268.html