整理的算法模板合集: ACM模板
点我看算法全家桶系列!!!
实际上是一个全新的精炼模板整合计划
数论是纯粹数学的分支之一,主要研究整数的性质。整数可以是方程式的解(丢番图方程)。有些解析函数(像黎曼 ζ 函数)中包括了一些整数、质数的性质,透过这些函数也可以了解一些数论的问题。透过数论也可以建立实数和有理数之间的关系,并且用有理数来逼近实数(丢番图逼近)。
按研究方法来看,数论大致可分为初等数论和高等数论。初等数论是用初等方法研究的数论,它的研究方法本质上说,就是利用整数环的整除性质,主要包括整除理论、同余理论、连分数理论。高等数论则包括了更为深刻的数学研究工具。它大致包括代数数论、解析数论、计算数论等等。
简而言之,数论就是研究整数的理论,在ACM / OI 竞赛中,经常用到数论的相关知识,纯粹考察数论的题目并不会很多,大部分是和其他类型的问题结合起来的,常考知识:约数,倍数,模线性方程,欧拉定理,素数,反演等等。
本文着重于编程竞赛,即国际大学生程序设计竞赛 ACM / ICPC 、信息学奥林匹克竞赛 NOIP,NOI,IOI等编程竞赛中相关的初等数论问题,包含几乎所有数论相关内容的定理,概念,代码实现,部分证明以及例题选讲,更多定理证明内容参见《初等数论及其应用》和《具体数学》。
由于涵盖了初等数论的绝大多数概念,定理,证明,推论,所以本文同样适合数学竞赛的同学阅读使用。
其中:
0x00整除,讲解了一些整除的基础知识,理解这些内容是我们学习接下来的内容的基础。
0x10整除相关,为大家系统地讲解了初等数论研究的最重要的内容之一:素数与约数,包括素数、反素数、唯一分解定理、最大公约数、最小公倍数、互质与欧拉函数等整除相关的基本概念,并稍作拓展,部分小节为大家提供了一些经典例题,供大家学习巩固使用,还讲解了容斥原理的相关概念和在数论里的两个经典运用,是非常重要的知识点。最后拓展了一下素数在实际生活中的应用:加密与解密,感兴趣的读者可以深入学习一下。
0x20同余,同余及同余方程,初等数论研究的另一大版块,也是竞赛要求的基础知识,首先为大家带来的模运算这个重要概念,在了解了同余的概念以后又为大家简单讲解了竞赛常用定理,欧几里得算法,拓展欧几里德算法,类欧几里得算法,求乘法逆元,解线性同余方程、高次同余方程等基本算法,需要大家理解并掌握。前三章是数论的基础,请一定掌握。
0x30积性函数,从第四章开始,就进入了进阶版的数论知识,我为大家讲解了数学中会涉及到的一些函数,以及最重要的积性函数的相关概念,常见积性函数,并简要证明了莫比乌斯函数是积性函数,其余积性函数的证明方法大同小异,留给读者自己尝试。介绍了较为重要的狄利克雷卷积概念,即两个积性函数间的一种基本运算,给出了一些性质以及推导结论,希望读者可以理解并自己推导,理解这些内容是大家迈向高阶数论的基石。
0x40反演,从最基础的欧拉反演、莫比乌斯反演出发,为大家列举了包括二项式反演、斯特林反演、单位根反演、子集反演、最值反演、拉格朗日反演等 “ 简单 ” 反演的基本性质定理以及部分推导出的 “ 常用 ” 结论,希望读者可以阅读以后自行证明。除此之外,还为大家列举了一些常用技巧,以及在求解积性函数时有奇效的 D i r i c h l e t \tt Dirichlet Dirichlet 前缀和的相关概念和实现代码。
0x50筛法,即积性函数的筛法,从基础的线性筛法拓展开来,介绍了复杂度较之线性筛更为优秀的杜教筛的相关证明及应用,并提供了更加优秀的 Min_25 筛、sieve 筛的基本模板和使用用法。
0x60原根,研究了正整数 n n n 的模 n n n 整数集中的乘法结构,介绍了模 n n n 整数的阶的基本性质,引出原根的概念。提供了原根的性质、求法、离散对数这一重要概念以及竞赛相关的一些简单应用,如原根在快速数论变换的应用以及证明。并讲解了前面遗留的第二种高次同余方程(N 次剩余)的解法。
0x70二次剩余,就是一个二次项 % p \%p %p 后的剩余。为大家讲解二次同余方程的相关性质解法,在竞赛中常有考察。
0x80某些非线性丢番图方程,前面介绍了丢番图方程的概念,并讲解了使用拓展欧几里得算法求解线性丢番图方程的方法以及代码实现。那么对于非线性的丢番图方程呢?一个广为人知的定理表明,并不存在一个适用于所有非线性丢番图方程的通用解法,人们在数百年的研究中得到了一些特殊的非线性丢番图方程的解法,例如著名的毕达哥斯拉三元组,费马大定理,佩尔方程,此部分竞赛涉及较少,但是不排除哪位出题人的兴致盎然,建议简要阅读了解相关定理解法。
0x90高斯整数,前面的章节,我们研究的都是整数集合的一些性质,有趣的是其他的一些数集中也存在着一些类似整数的性质。我们将数论拓展到复数集,也就是高斯整数,即形如 a + b i a+bi a+bi 的数。本章为大家讲解了一些数论概念在复数集上的拓展,例如高斯素数,高斯整数上的最大公约数、唯一分解定理,高斯整数环等相关概念,竞赛中略有涉及,建议了解相关概念即可。
0x100杂项,收录了一些不知道怎么分类的内容,说不定会有什么用… 例如幂级数的展开式大全,哥德巴赫猜想及其拓展,特征值法求递推式通项公式,预处理 x x x 的次幂 O ( 1 ) O(1) O(1) 计算等等。
为了能使大家更好地运用这些知识,我基本上为每个算法都增加了一个竞赛例题选讲板块,优先选择算法经典例题、ICPC / CCPC 真题,并附上了我的详细题解以及部分题目代码,每道题目都给出了相应的题目编号,来源各大OJ,作为大家的课后练习。当然,仅凭这些例题是远远不够的,剩下的就需要大家自己上网检索高质量习题自行练习。
希望大家可以认真阅读本篇文章,真正学会数论,学懂数论,爱上数论,希望本文能在大家的算法竞赛道路上提供帮助,助力大家实现自己的梦想。若真如此,本人荣幸之极。
孟繁宇
2021年1月29日于郑州家中书房
注:本文涵盖了编程竞赛相关的几乎所有数论知识,0x00 ~ 0x30 为基础数论知识,建议一定掌握,0x0x40 ~ 0x72 均为高阶数论知识,稍有难度,建议进阶的同学理解掌握,0x73 ~ 0x100为拓展内容,部分取自《初等数论及其应用》(机械工业出版社,原书第5版),考察频率较低,但还是建议阅读了解,属于选学内容。
正文将视情况择机(看心情 )分批发布
正文内容太长,共十章,一百多小节,近五万字,近十五万字符,放到一块的话网页都快崩了 ~
前言
0x00 整除
0x10 整除相关
0x20 同余
0x30 积性函数
0x40 反演
0x50 筛法
0x60 原根
0x70 二次剩余
0x80 某些非线性丢番图方程
0x90 高斯整数
0x90.0 复数
0x91 高斯整数
0x92 高斯素数
0x93 唯一分解
0x94 最大公约数
0x95 同余和剩余系
0x96 费马二平方和定理
0x97 分解 4 k + 1 4k+1 4k+1 型素数
0x98 构造 a 2 + b 2 = n a^2+b^2=n a2+b2=n 的方案
0x99 竞赛例题选讲
0x100 杂项
0x110 后记
原本只是打算简单花费一天的时间整理一下我学过的数论知识,加上最近刚刚看完《初等数论及其应用》,以及部分的《具体数学》,学到了一些奇怪的新姿势,想要记录一下。发现最后越写越多,从最开始的五千字,一万字,写到了最后的四万五千字,十四万七千的字符,涵盖的内容也越来越多,我几乎翻遍了全网的数论博客,抽取出了很多人总结的经验之谈。为了使得整篇不那么枯燥,我为每个算法都精选了 经典例题 / ICPC / CCPC / NOIP / NOI 真题,并附上我的详细题解和部分代码。我现在几乎可以负责任地说:算法竞赛,数论相关,这一篇就够了。
(何止是够了,还多了好多好多 )
参考资料:
《初等数论及其应用》
《具体数学》
《算法竞赛进阶指南》
《简明数论》
神O的数论全家桶
数学笔记:数论
【知识总结】数论全家桶
初等数论学习笔记(一)sola
莫比乌斯反演也是数论
ACM中的数学问题合集
ACM数论基本定理
关于数论的一些总结
数论总结
ACM数论总结
如果对本文感兴趣想要让我更新的话,可以在点赞后到评论区里文明催更,我将视情况(看心情 )更新
都是一些常见的数论知识,应该没什么人想看吧
今天发布这个索引文章,算是我给我自己的生日礼物?(雾
说明一下,本文是我在学习之余,花了一些时间整理的数论知识合集,也可以说是《初等数论及其应用》学习笔记,纯属个人乱搞,部分内容摘自《初等数论及其应用》、《具体数学》等相关数论书籍,或是互联网上各式各样的博客,增加了一些个人见解,自己喜欢的例题和分析,因为我太菜了,请大佬们轻虐,呜呜呜
因为算是一个个人向的知识例题模板整理,所以不是很想发出来,要是想看的人多我就发一下吧…