原来联赛是考数论的......好像很多的结论没有给证明。
一些定义和结论
剩余类:记模 m 为 r(r∈[0,m))的自然数组成的集合为 kr,则 kr 为模 m 的一个剩余类,任意 amodm=r,称 a 为 kr 的一个代表元。
完系:在每个 kr 中任取一个代表元为模 m 的一个完系。
缩系/简化剩余系:对于每一个与 m 互质的 r,在 kr 中任取一个代表元为模 m 的一个缩系。若 x⊥m,则将 m 的一个缩系中每个数都乘 x 后,仍然为 m 的一个缩系。
裴蜀定理:ax+by=c,x∈Z∗,y∈Z∗ 有整数解的充要条件是 gcd(a,b)|c
费马小定理:若 gcd(a,m)=1,则 am−1≡1(modm)
欧拉定理:若 gcd(a,m)=1,则 aφ(m)≡1(modm)
扩展欧拉定理:ab≡ab mod φ(m)+φ(m)(modm)
Lucas 定理:
(nm)=(⌊n/p⌋⌊m/p⌋)(nmodpmmodp)(modp)
欧几里得算法(辗转相除法):
gcd(a,b)=gcd(b,amodb) (b≠0)gcd(a,0)=a
Stein算法:
当 a,b 均为偶数时:gcd(a,b)=2gcd(a/2,b/2);
当 a 为偶数,b 为奇数时:gcd(a,b)=gcd(a/2,b);
当 a 为奇数,b 为奇数时:gcd(a,b)=gcd(a−b,b).(a>b)
扩展欧几里得算法(exgcd)
求解下面这个不定方程:
ax+by=c
利用裴蜀定理判断有无解,若有解必有 gcd(a,b)|c.
先求解 ax+by=gcd(a,b)
把后面的 gcd(a,b) 辗转相除一下再写成类似的形式(这里的 x′,y′ 是对应 gcd(b,amodb) 的 x,y,和上面的 x,y 没有关系):
ax+by=gcd(a,b)=gcd(b,amodb)=bx′+(a−⌊ab⌋b)y′
因为要求解 x,y,所以假设我们已经求解了 x′,y′,则要按 a,b 把两个方程分开。
ax+by=ay′+b(x′−⌊ab⌋y′)
递归求解得到 x′,y′ 后,对比系数可得 x=y′,y=(x′−⌊ab⌋y′)。
这样递归就能求出 ax+by=gcd(a,b) 一组特解了,最后当 b=0 的时候递归终止,此时 ax+by=gcd(a,b) 的解是 x=1,y=0.
void exgcd(int a, int b, int &x, int &y) {
if(!b) { x = 1, y = 0; return ; }
exgcd(b, a % b, x, y);
int nx = y, ny = x - (a / b) * y;
x = nx, y = ny;
}
令 d=gcd(a,b).
求出 ax+by=d 的一组特解 ax0+by0=d,则有 ax0cd+by0cd=c,记作 ax1+by1=c.
其通解为 a(x1+kbgcd(a,b))+b(y1−kagcd(a,b)).
充要性证明与下面证明扩展中国剩余定理的充要性大致相同,(考虑在数轴上从位于 d 的位置跳)。
扩展中国剩余定理
合并两个一元线性同余方程:
{x≡a1(modm1)x≡a2(modm2)
先考虑求出一个特解:有 a1+k1m1=a2+k2m2,整理得 k1m1−k2m2=a2−a1,用裴蜀定理判断有无解,否则 exgcd 求出一组解 (p,q),则求出同时满足原先两个同余方程的特解 x0=pm1+a1 .
然后考虑利用这个特解找到通解的规律:考虑所有满足第一个方程的 x,它在与 x0 的距离是 m1 的倍数,所有满足第二个方程的 x,它与 x0 的距离是 m2 的倍数。那么所有同时满足两个方程的 x,它与 x0 的距离既是 m1 的倍数也是 m2 的倍数,那么显然满足条件的 x 是与 x0 距离是 lcm(m1,m2) 的倍数、
即求出与所给两个方程等价的方程:x≡x0(modlcm(m1,m2)).
为了防止爆精度,exgcd 求解同余方程时使用最小非负整数解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-10-06 分层图 & [JLOI2011]飞行路线题解