质数的无穷性——从素数到数论

很多自然数都可分解成一些更小的数(直至不可再分,即为素数)的乘积,例如 12=4×3 ,其中 4=2×2 ,因此 12=2×2×3 。而此时,2 和 3都不可再继续进行分解了,它们是最基本、最纯净的数,我们就把这样的数叫做“质数”或者“素数”。同样地,2/3/5/7/11/13等等都是不可分解的,它们也都是质数。它们是自然数的构件(building blocks),是自然数世界的基本元素。12 由两个 2 和一个 3 组成,正如水分子( H2O )是由两个氢原子和一个氧原子组成的一样。只不过,和化学世界不同的是,自然数世界里的基本元素是无限的——质数有无穷多个。

关于为什么质数有无穷多个,欧几里得有一个非常漂亮的证明。反证法进行证明,假如质数只有有限个,其中最大的那个质数为 P (既然是最大的,也即,凡大于 P 的数均不是素数)。现在把所有的质数连乘起来,再加一,得到一个新的数 N ,也即, N=2345P+1 ,注意到 N 除以每一个质数都会余1。这意味着, N 不能被任意一个质数整除,换句话说 N 不可被分解,也即为素数。于是产生矛盾。质数有无限多个。

需要补充的的一点是,这个证明容易让人产生误解,即把头 n 个质数连乘起来再加1,总能产生一个新的质数。这是不对的,因为既然只是选择的前 n 个(哪怕 n 很大),那么所得数就有可能是那些我们没有乘进去的质数构成的,比如 234571113+1=30031 ,它可以被分解为 59×509

从欧几里得时代就开始,人们近乎疯狂地想要认识自然数的本质规律。组成自然数的基本元素(也即是质数)自然就成为了一个绝佳的突破口,于是对质数的研究成为了探索自然数世界的一个永久的话题。也是今天所说的“数论”。

质数理论来研究说,真的会非常方便 a b 的倍数(或者说 a 能被 b 整除, b a 的约数),意为 a 拥有 b 所含的每一种质数,并且个数不会更少 12=2×2×3,a=12×15=2×2×3×3×5

  • 12 中有两个2,180 中也有两个2
  • 12 中有一个3,180 中有两个3
  • 180 中还包含 12 中没有的质数,也即是 5;
  • 对于每一种质数,12 里面所含的个数都比不过 180,这其实是表明 12 是 180 的约数;

假设 a=36=2×2×3×3,b=120=5!=2×2×2×3×5 ,那么, a b 的最大公约数是多少?我们可以依次考察,最大公约数里面可能会包含哪些质数,以及每个质数的个数。

  • 这个最大公约数最多可以包含多少个质数2?显然最多包含 2 个,否则无法整除 36
  • 这个最大公约数最多可以包含多少个质数 3?显然只有一个,否则无法整除 120.
  • 这个最大公约数最多可以包含多少个质数 5?显然一个都不能有,否则无法整除 36;
  • 因此, 36 120 的最大公约数为 2×2×3=12

我们接着来看 a b 的最小公倍数的构造。我们希望每种质数在数量足够的前提下越少越好(最小上界),为了让这个数既是 a 的倍数,又是 b 的倍数,三个2是必须的,两个3是必须的,一个5也是必须的。因此, a b 的最小公倍数就是 23×32×51=360 。便会发现 12×360=36×360 .

这其实也不奇怪,在最大公约数里面,每种质数有多少个,取决于 a b 当中谁含的这种质数更少一些,

36=2×2×3×3120=2×2×2×3×5

在最小公倍数的构成里面,每种质数有多少个,取决于 a b 当中谁所包含的这种质数更多一些,

36=2×2×3×3120=2×2×2×3×5

两者“互补”,最大公约数与最小公倍数乘在一起,也就相当于把 a b 各自所包含的质数都乘了一个遍。这即刻为我们带来了一个熟悉的推论:如果两数互质(最大公约数为1),这两个数的乘积就是它们的最小公倍数。

两数互质,相当于说这两个数不包含任何相同的质数,如果 a c 互质, b c 互质,显然 ab 也与 c 互质。还有另外一个结论,如果 a b 是两个不同的质数,则这两个数一定是互质的。

关于质数,有很多有趣美妙的定理。1640年,法国业余数学家 Pierre de Fermat(也即是费马大定理的提出者:费马)发现,如果 n 为质数,那么对于任意一个数 a a n 次方减去 a 都将是 n 的倍数( n|ana )。例如,7是一个质数,则 272,373,474 ,甚至 1007100 ,统统都能被 7 整除。

Fermat 小定理有一个等价的表述:如果 n 是一个质数的话,那么对于任意一个数 a ,随着 i 的增加, ai%n (也即关于 n 的余数)将会呈现长度为 n1 的周期性,也即 ai%n=ai+n1%n

  • 这是因为 n|ana ,也即 ana(modn) ,也即依次计算 a1,a2,,an 关于 n 的余数时, an 余数将会变得和 a1 (最开始的)相同,
  • 另一方面, ai%n 的余数,完全由前一项 ai1%n (所决定)。比如 33/7 的 3余6,这表明, 33 里包含 3 个 7 以及一个 6;因此, 34 里就包含 9 个 7(能够被7整除) 以及 3个6。为了得到 34=333 关于 7 的余数,只需要看 18 除以 7 余多少就行了。可见,要想计算 ai 关于 n 的余数, ai%n=[a(ai1%n)]%n
  • 综上,得证
>>> a, n, N = 3, 7, 20
>>> [a**i%n for i in range(1, N)]

[
    3, 2, 6, 4, 5, 1, 
    3, 2, 6, 4, 5, 1, 
    3, 2, 6, 4, 5, 1, 
    3]

需要注意的是, n1 并非是最小的周期。我们来看 2i 除以7的余数情况, 71=6 也是一个周期,但 3 其实是它更小的周期:

>>> a, n, N = 2, 7, 20
>>> [a**i%n for i in range(1, N)]
[2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2, 4, 1, 2]

如果除数 n 不是质数(而非质数是由质数构成),比如是两个质数的乘积(比如 35),周期的长度又会怎样呢? 3i 关于 35 的余数又有什么规律呢?注意到 5 和 7是两个不同的质数,它们显然直接就互质了。根据中国剩余定理,一个数除以 35 的余数就可以唯一地由它除以 5 的余数和除以 7 的余数确定出来。因而,为了研究 3i 除以 35 的余数,我们只需要观察 3i%5,3i%7 即可。由费马小定理可知,数列 3i%5 有一个长为 4 的周期,数列 3i%7 有一个长为 6 的周期。4 和 6 的最小公倍数是 12,因此 3i%5,3i%7 存在一个长为 12 的周期。到了 i=13 时, 3i%5,3i%7 将会开始重复,也即 3i 除以 35的余数将从此处开始发生循环。

>>> a, n, N = 3, 35, 37
>>> l = [a**i%n for i in range(1, 1+N)]
>>> print([l[i*12:(i+1)*12] for i in range(len(l))])

[   [3, 9, 27, 11, 33, 29, 17, 16, 13, 4, 12, 1], 
    [3, 9, 27, 11, 33, 29, 17, 16, 13, 4, 12, 1], 
    [3, 9, 27, 11, 33, 29, 17, 16, 13, 4, 12, 1]
]

类似地,假如某个整数 n 等于两个质数 p q 的乘积,那么对于任意一个整数 a ,写出 ai 依次除以 n 所得的余数序列, (p1)(q1) 的最小公倍数将称为该序列的一个周期。事实上, p1 q1 的任意一个公倍数,比如表达起来最为方便的 (p1)×(q1) ,也将成为该序列的一个周期。这个规律可以用来解释很多数学现象。例如,大家可能早就注意过,任何一个数的乘方( ai ),其个位数( %10 )都会呈现出长度为 4 的周期(这包括周期为1(5)和周期为2(4)的情况),其实是因为,10 等于 2 和 5 这两个质数的乘积,而 (21)×(51)=4

1736年,瑞士大数学家 Leonhard Euler(欧拉)对此进行了进一步的研究,讨论了当 n 更复杂的数时推导余数序列循环周期的方法,得到了一个非常漂亮的结果:在 1 到 n 的范围内有多少个数和 n 互质(包括1在内), a i 次方除以 n 的余数序列就会有一个多长的周期。为了将上述定理和其他的 “Euler 定理”区别开来,有时也称它为 “Fermat-Euler” 定理。

你可能感兴趣的:(数论)