每个程序员都应该知道的基础数论


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


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   


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


2、欧几里得定理


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


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

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


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


延伸阅读:Euclid's Theorem、Euclid's Lemma、walfram


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。


延伸阅读:GCD、Bezout's Identity、Euclid's Algorithm、Extended Euclid's Algorithm


4、整数因式分解


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


延伸阅读:wikipedia、 interactive animation


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 Theorem、Solving Linear Congruences


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


中国剩余定理的直接推论如下:假设 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 的最小公倍数


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


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手册


8、欧拉 Phi 函数、除数函数、约数和、Mobius 函数


欧拉的 Phi 函数 (又称为常数函数,由φ表示)是自然数的函数,给出与相应的自然数互质的正整数的数目。因此,φ(8) = 4, φ(9) = 6 等。 该函数的以下属性值得注意:


a) 如果 p 是素数,则 φ(pk) = (p-1)pk-1 

b) φ 函数是乘法的,即如果 if (a,b) = 1 则 φ(ab) = φ(a)φ(b)。 

c) φ(n) 的值可以通过欧拉公式获得:令 n = p1a1 * p2a2 * .... * pkak 是 n 的素因子分解。则


  • φ(n) = n * (1- 1/p1)) * (1- 1/p2)) * ... * (1- 1/pk))


d) 以编程方式,如果我们欲求 1 到 n 的 φ , 那么我们可以非常好地使用筛选算法连同 φ 的乘法性质。中心思想是:如果 n 是素数,则 φ(n) = n-1。否则,如果 n 是素数的幂,例如 n= pk,则 φ(n) = (p-1)pk-1。否则,对于某个素数p,令 n=pk*q 。使用乘法属性, 我们有 φ(n) = φ(pk)φ(q)


φ(n) 的两个重要属性:


i. aφ(n) ≡ 1 (mod n) 每当 (a,n) = 1。 具体来说, 对于素数p,如果 p 不能整除 a,则 ap-1 ≡ 1 (mod p)。 这种特化也被称为费马小定理。


ii. 令 d1, d2, ...dk 为 n 的所有除数(包括 n)。则 φ(d1) + φ(d2) + ... + φ(dk) = n
例如,18的除数是1、2、3、6、9 和 18。观察到 φ(1) + φ(2) + φ(3) + φ(6) + φ(9) + φ(18) = 1 + 1 + 2 + 2 + 6 + 6 = 18

除数函数,表示为 d(n),给出了一个自然数的除数的数目。例如,d(18) = 6。类似地,除数函数之和,表示为 σ(n),给出了 n 的除数的和。 因此,σ(18) = 1+2+3+6+9+18 = 39。关于这两个函数以下属性毫无价值:

a) 如果 p 是素数,则 d(p) = 2。另外, d(pk) = k+1, 并且 σ(p) = p+1

b) 如果 n 是两个不同的素数的乘积,假使 n = pq, 则 σ(n) = n+1+(p+q)。另外观察到这种情况:φ(n) = n+1-(p+q)。


c) 一般来说,令 n = p1a1 * p2a2 * .... * pkak 。则 d(n) = (a1+1) * (a2+1) * ... (ak + 1),并且 σ(n) 由以下乘积给出:


  • σ(n) = ( (p1(a1+1) - 1) / (p1-1) ) * ( (p2(a2+1) - 1) / (p2-1) ) * ... * ( (pk(ak+1) - 1) / (pk-1) ) 


如果 σ(n) =2n,则 n 被称为“完全数”。换句话说, 完全数的真因子(即除了自身以外的除数)的和恰好等于它本身。


mobius函数µ(n) 在所有正整数中定义如下:


  • 在 n 是非平方数(即 n 是不能被任意整数平方得到)并且 n 有偶数个不同的素数因子,则 µ(n) = 1

  • 在 n 是非平方数(即 n 是不能被任意整数平方得到)并且 n 具有奇数个不同素数因子,则µ(n) = -1


在 n 是平方数,即 n 是某个整数的平方,则 µ(n) = 0 

Mobius 函数是乘法分配性的,即 a 和 b 互为质数,则 µ(ab) = µ(a)*µ(b).

计算欧拉方程函数的一个有用公式可以用 mobius 函数给出:令 d1,d2,... dk 为 n 的所有除数。然后


φ(n) = (d1 * mu (n/d1) ) + (d2 * µ(n/d2) ) + .... + (dk * µ(n/dk) )

这也可以写成:

φ(n) = (µ(d1) *  (n/d1) ) + (µ(d2) * (n/d2) ) + .... + (µ(dk) * (n/dk) )


使用筛选法计算 phi[n] 的 Java 实现如下:

//read/get n 
int phi[] = new int[n+1];   for(int i=2; i <= n; i++) phi[i] = i; //phi[1] is 0  
for(int i=2; i <= n; i++)   if( phi[i] == i )   for(int j=i; j <= n; j += i )   phi[j] = (phi[j]/i)*(i-1);

阶乘


阶乘是非常重要的。N 的阶乘定义如下:N = (N)*(N-1)*(N-2)*(N-3)...1。在计算 nPr nCr 时需要使用阶乘。他们像这里描述的那样很快变得非常大,所以他们需要非常仔细的处理大数、大整数表示等。


延伸阅读:欧拉的 Totient 函数、除数函数、除数和总和、Mobius函数

到此我们完成了对基本数理论概念的讨论。对于那些对数理论感兴趣的人,这里有一些值得一读的书——


An introduction to the theory of numbers: by Niven, Zukerman and Montgomery (数论导论)

Elementary Number Theory : by David Burton (数论基础)


整数序列


流行的整数序列有很多。它们中的许多都基于递归关系。主要的定理被广泛用于了解其复杂性,边界与循环的关系。很多流行的整数序列,例如:费布那切数列,鲁卡斯数字, 斯特恩双原子数字, 懒卡特数字, 帕多万数字 还有多边形数字,诸如 五角形数字, 六角形数字。


对数论的介绍:哈迪和赖特

初等数论: 琼斯和琼斯

数学诱导 - 一种技术教程,经常用于离散空间的证明。

具有数学归纳原理的问题和解决方案的教程。


来自:开源中国社区

链接:https://www.oschina.net/translate/tutorial-number-theory

原文:https://www.codechef.com/wiki/tutorial-number-theory/


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powerbi视觉对象_玩转Power BI的图片可视化

​制作可视化报告时&#xff0c;为了展示效果&#xff0c;有时候需要用图片来展示&#xff0c;在 Power BI 中&#xff0c;关于图片的自定义视觉对象主要有下面三个&#xff0c;利用他们可以很轻松的进行图片可视化。下面来看看这些视觉对象的效果。样本数据如下&#xff1a;为…

东南大学计算机网络_东南大学,2020年东南大学高考录取分数线分析

各位读者大家好&#xff0c;今天给大家介绍的是南京重点大学—东南大学。小编一直从事高等教育领域的写作&#xff0c;感兴趣的读者可以关注一下小编~1.学校基础东南大学&#xff0c;简称“东大”&#xff0c;是中华人民共和国教育部直属、中央直管副部级建制的全国重点大学&am…

Goodbye 2020,Welcome 2021 | 沉淀 2021

引言2021年&#xff0c;已开启二月的篇章&#xff0c;农历新年也张灯结彩而来&#xff0c;只不过要留守过年。在这辞旧迎新之际&#xff0c;踏入而立之年之时&#xff0c;正是算账的好时候&#xff0c;数一数今年的成长&#xff0c;讲一讲来年的期望&#xff0c;最重要的还是要…

程序员必须知道的十大基础实用算法及其讲解

本文盘点程序员必须知道的十大基础实用算法及其讲解。 算法一&#xff1a;快速排序算法 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下&#xff0c;排序 n 个项目要Ο(nlogn) 次比较。在最坏状况下则需要Ο(n2) 次比较&#xff0c;但这种状况并不常见。事实上&#…

sql 日期和当前日期时间差_详解PostgreSQL 如何获取当前日期时间

概述开发数据库应用或者调试代码时&#xff0c;经常需要获取系统的当前日期和时间&#xff0c;今天主要看一下 PostgreSQL 中提供的相关函数。一、当前日期CURRENT_DATECURRENT_DATE 函数用于获取数据库服务器的当前日期&#xff1a;postgres# SELECT CURRENT_DATE;调用该函数时…

我们只知大势将至,却不知未来已来

❈ 凯文•凯利 《必然》&#xff1a; 未来的一切事物的生命都将是无穷尽的升级&#xff0c;而且迭代的速度不断的在加速。包括看得见的事物&#xff0c;也包括看不见的审美观和价值观。无论你使用一项工具的时间有多长&#xff0c;不断的升级都会把你变成一个菜鸟&#xff0c;从…

c#爬虫-1688官网自动登录

背景在1688官网里面有很多信息是需要登录才能看得到的&#xff0c;比如商家的联系电话等等。那么我们在抓取它的网页的时候&#xff0c;肯定是需要维持登录状态才能得到对应的内容。这里面就会涉及到自动登录的问题。登录地址https://login.1688.com/member/signin.htm自动登录…

tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件

TensorRT是一个高性能的深度学习推理&#xff08;Inference&#xff09;优化器&#xff0c;可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxnet、Pytor…

做一个网站多少钱?

「一辆车子多少钱&#xff1f;一个房子多少钱&#xff1f;」 这问题在工程师或设计师的眼里就如「一辆车子多少钱&#xff1f;一个房子多少钱&#xff1f;」,这个问题实在空泛到一个让人无法言语的境界&#xff0c;这也是我最常被问到的问题「做一个网站多少钱&#xff1f;」。…

[Abp 源码分析]多租户体系与权限验证

点击上方蓝字关注我们0.简介承接上篇文章我们会在这篇文章详细解说一下 Abp 是如何结合 IPermissionChecker 与 IFeatureChecker 来实现一个完整的多租户系统的权限校验的。1.多租户的概念多租户系统又被称之为 Saas &#xff0c;比如阿里云就是一个典型的多租户系统&#xff0…

生存是一种毅力

三月初回到成都,出站时还是凌晨5点多,第一次这么早站在成都的火车站,拥挤的人群和车辆,我的神志却异常的清醒,坚持不要母亲来接我. 到家洗漱后到头就睡,一觉醒来10点多,中午的成都虽不像北京那么阳光普照但也感觉暖暖的.想起在北京训练营的日子,"枯藤老树昏鸦"每天伴…

linux truncate文件,linux系统编程:用truncate调整文件大小

truncate的使用非常简单&#xff1a;int truncate(const char *path, off_t length);参数1&#xff1a;文件名参数2: 文件需要被调整的大小length 大于 文件大小&#xff0c; 文件后面会填充空白字节或者空洞length 小于 文件大小&#xff0c; 文件多出的部分&#xff0c;会被…

如何在 ASP.Net Core 中使用 SignalR

SignalR for ASP.Net Core 是 SignalR 的浴火重生版&#xff0c;允许你在 ASP.Net Core 中实现实时通讯&#xff0c;这里的 实时 意味着双方都能快速的感知对方发来的消息&#xff0c;比如&#xff1a;一旦 server 端有需要推送的内容将会直接 push 到 client&#xff0c;这和原…

搞笑动图:这些痛,只有程序员懂…

“代码上线后又追加了新特性” “在生产环境做 hotfix” “刚调稳定的系统&#xff0c;公司叕空降了一位架构师&#xff0c;叕要重构现有系统…… ” “当程序员听客户说还在用 IE 时” “当黑客拿到 root 权限之后” “代码进入循环分支后” “项目交接&#xff0c;客户要求开…

linux内核分为子系统,Linux内核内存管理子系统分析【转】

还是那张熟悉的老图&#xff1a;Linux内核子系统简介(由七个部分组成)Linux内存管理模型&#xff1a;1. 内存管子系统职能&#xff1a;1> 管理虚拟地址与物理地址的映射2> 管理物理内存的分配2. 地址映射管理1> 虚拟地址空间分布&#xff1a;linux采用的是一种虚拟地…

spss22.0统计分析从入门到精通_数据分析最全资料:SPSS/MATLAB/SQL/SAS/EXCEL经典教材+视频教程,快速入门!...

可以说当今社会数据就是力量。数据分析能力已经成为各个行业必备的技能&#xff0c;如果能熟练掌握数据分析技能&#xff0c;不管是留学申请还是以后的就业&#xff0c;都会是一个很大的加分项。但是目前国内很少有高校专门开设数据分析课程&#xff0c;想要掌握技能大部分要靠…

可反复擦写5万次的手写板,竟然还能用橡皮擦能清除屏幕!

作为一名文艺青年&#xff0c;平时写字画画是我的一大爱好。 心情不错&#xff0c;来个创作&#xff01; 还记得我们之前介绍过的Boogie Board电子手写板吗&#xff1f; 小木用的就是它。 虽然好用&#xff0c;只不过有时候不小心画错了&#xff0c;只能重新来。 伤心啊…… 不…

[Abp 源码分析]权限验证

点击上方蓝字关注我们0.简介Abp 本身集成了一套权限验证体系&#xff0c;通过 ASP.NET Core 的过滤器与 Castle 的拦截器进行拦截请求&#xff0c;并进行权限验证。在 Abp 框架内部&#xff0c;权限分为两块&#xff0c;一个是功能(Feature)&#xff0c;一个是权限项(Permissio…

cocoscreator editbox 只允许数字_《Cocos Creator游戏实战》做一个数字调节框

当玩家购买道具的时候&#xff0c;一个个买可能会比较麻烦&#xff0c;用数字调节框的话玩家一次性就可以买好几十个了(钱够的话)。运行效果如下&#xff1a;Cocos Creator版本&#xff1a;2.2.0公号"All Codes"后台回复"数字调节框"&#xff0c;获取该项目…

为什么一流成功人士的闹钟都定在早晨5:57?

对很多人来说&#xff0c;早晨时分是一天中最匆忙的时段。近年来&#xff0c;我在研究人们如何利用时间的过程中发现&#xff0c;市场上铺天盖地的媒体教你如何利用早晨的时间。 美国国家睡眠基金会发布的一项睡眠调查结果显示&#xff0c;在工作日的早晨&#xff0c;30-50岁的…