「学习笔记」联赛数论再学习

「学习笔记」联赛数论再学习

原来联赛是考数论的......好像很多的结论没有给证明。

一些定义和结论

剩余类:记模 mrr[0,m))的自然数组成的集合为 kr,则 kr 为模 m 的一个剩余类,任意 amodm=r,称 akr 的一个代表元。

完系:在每个 kr 中任取一个代表元为模 m 的一个完系。

缩系/简化剩余系:对于每一个与 m 互质的 r,在 kr 中任取一个代表元为模 m 的一个缩系。若 xm,则将 m 的一个缩系中每个数都乘 x 后,仍然为 m 的一个缩系。

裴蜀定理ax+by=c,xZ,yZ 有整数解的充要条件是 gcd(a,b)|c

费马小定理:若 gcd(a,m)=1,则 am11(modm)

欧拉定理:若 gcd(a,m)=1,则 aφ(m)1(modm)

扩展欧拉定理abab mod φ(m)+φ(m)(modm)

Lucas 定理

(nm)=(n/pm/p)(nmodpmmodp)(modp)

欧几里得算法(辗转相除法)

gcd(a,b)=gcd(b,amodb)   (b0)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(ab,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+(aabb)y

因为要求解 x,y,所以假设我们已经求解了 x,y,则要按 a,b 把两个方程分开。

ax+by=ay+b(xaby)

递归求解得到 x,y 后,对比系数可得 x=y,y=(xaby)

这样递归就能求出 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(y1kagcd(a,b))

充要性证明与下面证明扩展中国剩余定理的充要性大致相同,(考虑在数轴上从位于 d 的位置跳)。

扩展中国剩余定理

合并两个一元线性同余方程:

{xa1(modm1)xa2(modm2)

先考虑求出一个特解:有 a1+k1m1=a2+k2m2,整理得 k1m1k2m2=a2a1,用裴蜀定理判断有无解,否则 exgcd 求出一组解 (p,q),则求出同时满足原先两个同余方程的特解 x0=pm1+a1 .

然后考虑利用这个特解找到通解的规律:考虑所有满足第一个方程的 x,它在与 x0 的距离是 m1 的倍数,所有满足第二个方程的 x,它与 x0 的距离是 m2 的倍数。那么所有同时满足两个方程的 x,它与 x0 的距离既是 m1 的倍数也是 m2 的倍数,那么显然满足条件的 x 是与 x0 距离是 lcm(m1,m2) 的倍数、

即求出与所给两个方程等价的方程:xx0(modlcm(m1,m2))

为了防止爆精度,exgcd 求解同余方程时使用最小非负整数解。

posted @   do_while_true  阅读(192)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2020-10-06 分层图 & [JLOI2011]飞行路线题解

This blog has running: 1837 days 12 hours 56 minutes 35 seconds

点击右上角即可分享
微信分享提示