数论
质数
唯一分解定理
任意一个正整数都可以唯一地表示成若干个素数的乘积,其中素数因子从小到大依次出现(这里的“乘积”可以有0个、1个或多个素因子)。
埃氏筛
要得到自然数n以内的全部素数,必须把不大于根号n的所有素数的倍数剔除,剩下的就是素数。时间复杂度
a[1]=1;
for(int i=2;i*i<=n;i++)
{
if(!a[i])
for(int j=i*i;j<=n;j+=i) a[j]=1;
}
时间复杂度分析
1、
埃筛看上去有两重循环,看着好像是
但是分析每层循环,发现循环次数为
发现括号内出现调和级数,对此有以下结论:
因此有时间复杂度
2、
实际上,标准的埃筛时间复杂度为
区别在于有无中间的
运用
埃筛常用于对因数(倍数)的筛查和统计,在数据大小支持且无法莫比乌斯反演的情况下使用
例:
70分做法:
变化一下,第二维枚举倍数:
发现符合埃筛形式,用埃筛统计即可
线性筛
在埃氏筛中,每个数被筛若干次。
改进:使每个数只被最小质因子筛。
当循环到当前数的因子之后,即可跳出循环。
时间复杂度O(n)。
vis[0]=vis[1]=1;
for(int i=2;i<=n;i++) {
if(!vis[i]) p[++cnt]=i; //p[]记录素数
for(int j=1;j<=cnt&&i*p[j]<=n;j++) {
vis[i*p[j]]=1; //i*p[j]被p[j]筛掉
if(i%p[j]==0) break; //p[j]循环到i的最小质因数则退出,因为i*p[j]只能被
} //最小质因数筛去,也就是i的最小质因数
}
新的理解
线性筛中各种操作,相当于对当前数的分类讨论:
1、
即
,存入
2、
即
,p[]循环边界
3、
正常筛数
这三类数在线性筛求各种积性函数的分析中起重要作用;
p.s.有时候需要记录最小质因子的个数;
最大公因数 & 最小公倍数
最大公因数:
最小公倍数:
性质
1、
应用:辗转相除法求gcd,时间复杂度
2、
3、
证明:设
,则 ,且
则问题等价于证明
反证,设
,则有 ,则 ,则 ,与条件矛盾,故得证
同理,第二个等号也可得出
利用此结论可以进一步证明性质1,当然还有其他用途
解题经验
多个数求gcd常用质因数分解。
例1:给定n个数,从其中选n-1个数,问最大gcd。(n <= 10^5)
解:任选两个数,答案一定在其因子里(抽屉原理)。检验答案即可。
例2:[P5502]
给定一个长度为
定义权值为
求出最大权值。
解法1:cdq分治板子
解法2:考虑定住右端点时,区间
的 值最多会有 种( 为值域)(因为根据唯一分解,区间 值 在区间扩大时要么不变,要么至少缩小 倍),每次移动右端点时将这 个值暴力修改就行了
例3: 求
解:先对
因数分解,最多会有 的因数,再考虑这些因数的贡献,因数 的贡献可用 快速求出,但对于小的因数,它们的倍数也为因数时会算重,因此从大到小考虑,把大数中算重的小数容斥掉即可,时间复杂度最坏约为 ,但是卡不满
约数个数有关的公式,见link
例4:求
同余运算
基本性质
裴(péi)蜀定理
设
推论
拓展欧几里得算法
线性不定方程
推导
设
则若原方程有解,
变形为:
又由于
对子问题(求解
代码
int exGcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;y=0;
return a;
}
int r=exGcd(b,a%b,x,y);
int t=x; x=y; y=t-a/b*y;
return r;
}
时间复杂度
细节处理
对于
应用
例1:[P1082]求关于x的同余方程
欧拉函数
定义
正整数n的欧拉函数
性质
性质5: 如果p为质数,且i % p = 0,则 φ(i * p) = p * φ(i)
性质5可以用来线性求欧拉函数(欧拉筛)
代码
费马小定理
定义
假如p是质数,且gcd(a,p)=1,那么
解释: 假如p是质数,且a,p互质,那么 a的(p-1)次方除以p的余数恒等于1
欧拉定理
定义
若m,a为正整数,且
乘法逆元
扩欧求逆元
线性求逆元
中国剩余定理
求解
的
建议直接背公式
扩展中国剩余定理
这位大佬讲得很透彻
数论分块
高效求解
简单来说,把
正确性证明
1、
时, 最多 种取值
时, , 最多 种取值
细节处理
注意
例题
原根与阶
利用群论知识,可以更好理解(其实是一套东西)
定义
阶:对于整数
原根:当
性质
1、由欧拉定理,
2、
3、阶的运算:
的充要条件为
证明略
4、对于原根
5、如果
6、由循环群的性质,
原根存在定理
一个数存在原根当且仅当
原根判定定理
推论
若
证明:(待补充link)
求原根
1、判断是否有原根,用原根存在定理判断
2、找最小原根
3、求
时间复杂度为
BSGS
求解
原理:根号平衡
设
原式化为:
将
时间复杂度
拓展BSGS
即不一定满足
考虑变形:
由裴蜀定理,将
设
然后将
反复进行该操作,直至
最后把相应系数乘上即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】