Math
数论
模运算和同余
定义模运算(mod) :
定义同余 :若
(注:下文省略mod m)
自反性:
对称性:若
传递性:若
可加性:若
更牛的可加性 :若
可乘性:若
可除性:若
最大公因数gcd求法(辗转相除法)
int gcd(int a, int b){
return !b ? a : gcd(b, a%b);
}
exgcd(用于解不定方程和求非质数意义下的逆元):
方程:ax + by = c (a,b,c均为整数,求x,y的整数解)
核心思路:在求gcd的末状态求出
具体做法:
当c 不是 gcd(a,b) 的倍数,时无x,y整数解
否则:ax + by = k * gcd,可先求出x/k,y/k
gcd末状态:
a = gcd, b = 0。此时
gcd的转移方法是:ax + by = gcd = bx' + (a -
整理一下:x = x' -
递归回去可得一组x/k,y/k的整数解, 再乘上k就是一组x,y的特解/
接下来就是求通解:
先令有解{x1,y1}{x2,y2}
代码:
void exgcd(long long a, long long b){
if(b == 0) {
x = 1;
y = 0;
gcd = a;
return ;
}
exgcd(b, a % b);
tmp = x, x = y, y = tmp - (a/b) * y;
}
用exgcd求逆元:ax = 1 (mod p) => ax = 1 + pk => ax - pk = 1,然后就可以开始解不定方程了。
中国剩余定理:
条件:(所有p为质)
题目:
x = y1(mod p1)
x = y2(mod p2)
…………
x = yn(mod pn)
令 M = Πp,
x =
如果p不都是质数,只是两两互质,逆元用exgcd求。
Miller_Rabin 判断素数
if(
∵
当指数b为奇数或者a^b = -1时可以默认p为质数
否则一直循环
把前12个质数做为底数a来试验可判断264以内的质数\
(注意:第一次要特判,只有ab==1时成立)
Pollard Rho 分解最大质因数算法
Pollard Rho算法分解一个数n的过程大体上是这样子的:\
1、找到一个数p,使得p|n,将n分解为p与n/p
2、如果p或n/p不为质数,将其带入递归上述过程
3、如果其是质数,将其记录并退出\
找p的过程是这个样子:\
1、找到一个数p1
2、通过某种玄学推导手段找出一个与p1对应的p2
3、gcd(|p1-p2|,n)不是1或n时,此数为所求的p\
玄学推导手段:\
p2 = (
其中c为随机常数。
出现循环了怎么办?换一个随机常数c再搞。\
积性函数
f(ab) = f(a)f(b) (如果只有a,b互质时才成立,狭义积性函数)
例如
拉格朗日插值
拉插作用
已知n+1个点值,即
求n次多项式 f ,(或求f(x)的值)\
设
可以考虑先构造
$
可以得出
(如果把
那么
因为
复杂度:
特别的,如果
分子可以表示为 (???)
再带回即可
复杂度:O(n)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具