数论知识点全明星
数论知识点整合。(但是我数论很菜呀!!!)
质数
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
单个数质数判断方法
- 朴素算法:如果
不是质数,则 ,不妨令 ,只要检验所有的小于 的数是否能整除 即可,时间复杂度为 。 - Miller-Rabin算法:
前置知识:二次探测定理——对于素数 ,若 ,则 ;费马小定理——对于素数 ,满足 。
假定我们的 是一个大于 的奇数(不然可以直接判断),如果它是质数,则 。我们随意找一个 进行检验,如果这个成立,则 可能是素数。
与此同时,二次探测定理在一定程度上也能够检验素数,所以,将 转化成 ,首先预处理出 ,然后递归 次 如果 则检验 是否等于 或 ,如果不是,返回false
。
最后,如果 成立,返回true
,否则返回false
。
上述算法有 个概率正确,有 的概率错误。所以,检验 次的正确率就是 ,当 取 5~7 时正确率就足够高了。
素数筛法
- 埃氏筛,暴力枚举每一个数的大于它的所有倍数,他们不然不是质数,复杂度为
- 欧拉筛/线性筛,顾名思义,这个做法是线性的,具体实现时,对于任何一个合数
,记它最小的质因子为 ,数 只会被 筛掉。
因数倍数
最大公因数求法
暴力枚举(
最小公倍数求法
扩展欧几里得算法
求解关于
不妨令
则
递归求解
裴蜀定理
关于
必要性证明:
充分性证明:根据拓展欧几里得定理
同余
除法逆元与欧拉定理
如果
费马小定理
对于质数
欧拉定理
对于
拓展欧拉定理
对于任意的
Wilson定理
对于质数
阶与原根
阶
根据欧拉定理对于
阶的相关性质
模 两两不同余 ,则
原根
对于
原根判定定理:对于
同余方程(组)求解
CRT
求解同余方程组:
我们知道,对于
因为
所以对于
exCRT
求解同余方程组:
我们没有
考虑同余方程组
我们设
假设上述式子成立,我们根据 exgcd 可以得到一组
一直递归求解即可。
BSGS
求同余方程
根据欧拉定理,必然存在一个小于
记
则
预处理出所有的
exBSGS
求同余方程
没有和互质的条件,我们就尝试让
设
如果
这个时候如果满足互质关系,就可以直接BSGS了。否则,我们继续上述操作,找
直到
这也就意味着
当然,也有可能是有小于
高次同余方程
求解方程
首先求出
则
首先用BSGS求出
组合数
定义
基本公式
<---(这个很重要)
Lucas定理
对于质数
其中
exLucas定理
Lucas定理只能处理
求
根据唯一分解定理
我们求出每一个
也就是要求
所求转化为
记
现在考虑如何求
容斥
在计数时,必须注意没有重复,没有遗漏。为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复,这种计数的方法称为容斥原理。
基本容斥
minmax容斥
积性函数与迪利克雷卷积
积性函数
完全积性函数定义:
常见完全积性函数:元函数
积性函数定义:
常见积性函数:
欧拉函数
定义
如果
莫比乌斯函数
定义
约数个数函数
迪利克雷卷积
有定义可得
莫比乌斯反演
若
若
数论分块
基本思想
考虑数
在
当
所以我们需要求有关
杜教筛
求积性函数
我们先找到一个合适的积性函数
则
所以
所以我们找到合适的
单纯递归的复杂度为
考虑线性筛预处理出前
Min25筛
这是一种亚线性筛法,能够在
而比较好实现的方法被证明是
加下来我们记
当然,使用这种筛法需要满足一些限制:
需要是一个积性函数。 是一个关于 的低维多项式,即 。 能够快速求值。
很多时候,给定的
首先考虑如何处理出所有的质数。
因为我们知道
然后Min_25发现了一种DP方式来处理这个问题(接下来的处理过程中可以不考虑
记
那么我们需要的就是
考虑从
我们减少了所有
在除了一个
所以
则
因为任何小于
其次,因为
现在我们再来考虑另一个DP式。
仍然对贡献进行分类:
的质数,在第 维上的总贡献为 。- 其他,由于
是积性函数,所以考虑将所有 且 项指数为 的全部提取出来,贡献为 。
所以
有人证明,求
一定要注意自己的算法到底有没有算1 ,上述算法是没有算的,所以最终答案为
多项式科技
拉格朗日插值
对于一个最高次项次数小于等于
此时
因为我们知道
这样我们就可以快速的求出一个多项式的值了。
FFT
我们知道在确定了
所以对于两个多项式的乘法,我们可以用
这时候我们需要找到合适的值,所以就用到了复数。
记
我们知道
设
则
这样我们就可以递归求出
不难发现,它的逆变换是类似的,只是将单位根
这里
NTT
因为FFT无法解决对答案取模的情况,所以我们考虑将单位根
最常见
由于
显然
FMT
或卷积运算
由于题目的需要,我们有时得把卷积运算进行一定的变换。
本来的正常运算是处理
考虑卷积运算
所以
不难发现这是高维前缀和。
与卷积运算
考虑卷积运算
所以
快速求解就是高维后缀和。
FWT
异或卷积运算
考虑卷积运算
这是,沃尔什想出来了一个特别的变换。
那么
我们知道,
所以
考虑用分治优化变换过程。
因为变换的过程和
考虑它其中的某一位。当且仅当
逆运算需要带一个
子集卷积
考虑卷积运算
发现需要满足的第一个条件
而第二个条件,就需要满足
所以我们考虑加一维按
然后就是子集卷积,复杂度比FMT多了一维
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现