每个程序员都应该知道的基础数论 已翻译 100%

oschina 投递于 2017/09/11 11:18 (共 14 段, 翻译完成于 09-21)
阅读 3770
收藏 113
5
加载中

这篇文章讨论了数论中每个程序员都应该知道的几个重要概念。本文的内容既不是对数论的入门介绍,也不是针对数论中任何特定算法的讨论,而只是想要做为数论的一篇参考。如果读者想要获取关于数论的更多细节,文中也提供了一些外部的参考文献(大多数来自于 Wikipedia 和 Wolfram )。

brookstar
翻译于 2017/09/11 13:06
1

0. 皮亚诺公理

整个算术规则都是建立在 5 个基本公理基础之上的,这 5 个基本公理被称为皮亚诺公理。皮亚诺公理定义了自然数所具有的特性,具体如下:

(1)0是自然数;

(2)每个自然数都有一个后续自然数;

(3)0不是任何自然数的后续自然数;

(4)不同自然数的后续自然数不同;

(5)如果集合S包含了数字0,并且包含S中每一个数字的后续自然数,那么集合S就包含了所有的自然数。

上述第5个公理也被称为“数学归纳法的基础”。

通常,除了我们想要证明其他算术定理的情况,我们很少直接使用上述公理。但作为算术的基石,这些公理是值得我们去了解的。

延伸阅读:

https://en.wikipedia.org/wiki/Peano_axioms

http://mathworld.wolfram.com/PeanosAxioms.html   

brookstar
翻译于 2017/09/11 13:26
1

1. 算术基本定理和除法运算法则

正如这个定理的名称所言,算术基本定理是数论中所有概念的核心。算术基本定理含义如下:任何一个大于1的整数都可以以某种特定的方式写成质数的乘积的形式(这种特定方式取决于乘积中质数的顺序)。例如,18 = 2 * 9, 1755 = 33 *5 * 13. 这个定理在几乎所有的数论运算法则中都扮演着十分重要的角色,例如求一个数的质数因子、最大公约数、除数的和等等。想要证明这个定理其实很简单,实际上它是欧几里得第一个定理的一个推论(下面小节会讨论到)。

除法运算法则含义是说:给定两个整数a,b(b不等于0),那么存在两个整数q和r使得下面的等式成立:

a = bq + r, 0 <= r < b

通常我们把q称为商,而把r称为余数。如果r = 0,那么我就说b整除a,并且表示为:b | a.

延伸阅读:

https://en.wikipedia.org/wiki/Fundamental_theorem_of_arithmetic

http://mathworld.wolfram.com/FundamentalTheoremofArithmetic.html

https://en.wikibooks.org/wiki/Number_Theory/Elementary_Divisibility

https://en.wikipedia.org/wiki/Division_algorithm

brookstar
翻译于 2017/09/12 13:19
2

2. 欧几里得定理

数学中两个重要定理,被称为“欧几里德的第一定理(或欧几里德的引理)”和“欧几里德的第二定理(通常简称为”欧几里德定理“),内容如下:

第一定理:p|ab => p|a or p|b。该定理的直接结论就是算术基本定理。

第二定理:质数的数量是无限的。有很多简单的证明方法。

虽然确实存在无限多的质数,但也应该记住,质数之间存在任意大的差值。换句话说,给定n的前提下,总是可以获得一些列的n个连续复合数。

延伸阅读:Euclid's TheoremEuclid's Lemmawalfram

Tocy
翻译于 2017/09/11 13:57
0

3. 最大公约数、最小公倍数和贝祖定理

欧几里得算法是求两个数的最大公约数最常用的算法,而且也是一个很高效的算法,因为使用欧几里得算法求解两个数的最大公约数的算法步骤最多不会超过这两个数中较小的那个数的5倍。最大公约数通常使用圆括号表示—— (a,b) 表示a和b的最大公约数。类似地,最小公倍数通常使用方括号表示—— [a,b] 表示a和b的最小公倍数。

如果 (a,b) = 1,即 [a,b] = ab,此时我们称a和b互质。

如果 (a,b) = d,那么 (a/d,b/d) = 1。

最大公约数和最小公倍数之间的关系可以由一个非常简单的等式来表示:(a,b) * [a,b] = ab. 该等式为我们提供了一种快速计算两个数的最小公倍数的方法。

贝祖定理是说,如果 d = (a,b) 那么一定存在整数 x 和整数 y 满足 ax + by = d. (当然,如果存在的话,那么线性双变量方程的理论保证了无穷多解的存在性)。同样值得注意的是,k = d 是满足 ax + by = k 有一个关于 x 和 y 的解的最小正整数。 

指定 a 和 b,我们可以通过递归或迭代的方式实现扩展的欧几里得算法来求解满足等式 ax + by = d 的 x 和 y。

延伸阅读:

GCDBezout's IdentityEuclid's AlgorithmExtended Euclid's Algorithm

brookstar
翻译于 2017/09/13 13:08
1

4. 整数因式分解

整数因子分解的最常用的算法是 Eratosthenes 筛选法。在分解N时,将质数扫描到 sqrt(N)就足够了。另外,如果我们需要对 1 到 N 之间的所有数字进行因式分解,则可以使用该算法的单次运行来完成此任务 - 对于 1 到 N 之间的每个整数 k ,我们可以保持一对映射——整除 k 的最小质数、最大倍数,(p,a)。k 的剩余质因子与 k/(pa) 的相似。

延伸阅读:wikipedia、 interactive animation

Tocy
翻译于 2017/09/11 11:39
0

5. 线性同余方程组

形如ax≡b (mod n)的方程式(x是未知数)称为线性同余。当且仅当存在整数x使得n | (ax-b)成立时,这样的方程组将有一个解,即ax -b = ny,y是整数,换句话说,ax + n(-y)= b。我们已经从Bezout的等式中得知,像这样的线性不定方程将只有在(a,n)的gcd(假设该值为d)整除b时才有解。在这种情况下,让b = dd',a = da',n = dn',所以我们有:
da'x + dn'( - y)= dd',其中gcd(a',n')= 1
带入变量d
a'x + n'( - y)= d'。
由于gcd(a',n') = 1,现在我们可以使用扩展的欧几里德的算法来找到a'x + n'( - y)= 1的解,然后将该解乘以d'得到对于a'x + n'( - y)= d'的解。

注意,如果ax≡b(mod n)有一个解,则mod(n / d)有且仅有一个解。如果这个解是用x0表示的,那么mod n将恰好有d个解,由x0 + kn/d给出,其中0<= k<d。在关于二次方程的教程中详细讨论了这一点。

延伸阅读:Linear Congruence TheoremSolving Linear Congruences

Tocy
翻译于 2017/09/15 10:11
0

6.中国剩余定理

典型的问题形式是“寻找一个数,除以2余1,除以3余2,除以7余5”其余各项可以被推广为一元线性同余方程组之后可以使用中国剩余定理来解决。举个例子,下面的问题可以被表示为三个线性同余式:“x ≡ 1 (mod 2), x ≡ 2 mod(3), x ≡ 5 mod (7)”

也就是一元线性同余式方程组:
x ≡ a1 (mod n1)
x ≡ a2 (mod n2)
x ≡ a3 (mod n3)
....
x ≡ ak (mod nk)

假设整数ni,nj两两互质,则对任意的n=n1n2...nk,方程组有解

对于任意的i,当0 <= di < ni,令ci=n/ni,令di为同余式cix=1(mod ni)的解(这个解法可以在利用扩展的欧几里德算法)。上面的线性方程组的通解可以给出为:

c = a1c1d1 + a2c2d2 + ... + akckdk

rever4433
翻译于 2017/09/13 11:28
0

中国剩余定理的直接推论如下:假设 n = p1a1 * p2a2 * .... * pkak 为 n 的素因子分解。 那么,对于任何整数 a 和 b,我们对于每个 i 都有 a = b (mod n) iff a = b (mod piai ) 。

讨论一下 Ni 的不一定都是两两互质的中国剩余定理的推广,如下 - 线性同余系统

x≡a1(mod n1)
x≡a2(mod n2)
x≡a3(mod n3)
....
x≡ak(mod nk)

有解,当对于每个 i != j 都有 iff gcd(ni,nj) 除 (ai-aj) ,且存在唯一解 mod n,其中 n 是 n1,n2 ... nk 的最小公倍数

进一步阅读:中国剩余定理,求解线性同余,小程序

亚林瓜子
翻译于 2017/09/15 14:44
0

7. 二次方一致性

给定 q 和 n,如果等式 x2≡q(mod n) 具有解,则 q 称为二次残的模 n。如果该方程不具有解,则q被称为“二次非残差”。例如,x2≡9(mod 15)具有解 x = 12,因此 9 是模 15 的二次余数。另一方面,等式 x2≡11(mod 15)没有解,因此 11 是二次非残差,为了简单起见,如果一个正方形可以取一些正整数 n 的形式(nk + q),则整数 q 是模 n 的二次余数。

发现具有质数模的二次一致性是否具有一个解,是有些容易的:x2≡a(mod p)只有在(p-1)/ 2 = 1(mod p)时才具有解。 在这种情况下,可以使用 Shank-Tonelli 算法来获得解决方案。

延伸阅读: 二次残差二次互反性模拟Shank-Tonelli算法E4手册

溪边九节
翻译于 2017/09/14 17:49
0
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(6)

雷兽
业务代码 用不着 核心底层组件可能用的到 但是基本没人干这个 架构级岗位宏观较多 难得用得着 也通常有重重方法来回避直接代码做一些算法逻辑
张金富
张金富
不够通俗
第27个Bug
第27个Bug
一个都不知道。。。哈哈哈哈哈哈哈。。。
手握华为赛神仙
手握华为赛神仙
mark
句龙胤
句龙胤
没用,涨不了工资。
返回顶部
顶部