填坑行动10-gcd以及exgcd

@

Tips

  1. 本文中所有方程有解均为方程有整数解

gcd

gcd(a,b)a,b的最大公约数。
那么
gcd(a,b)=b, amodb=0gcd(bmoda,b), bmoda0
或者是
gcd(a,b)=b, a=0gcd(bmoda,b), a0
算法复杂度Θ(log2max(a,b))

exgcd

前置芝士

关于x,y的一个二元一次方程ax+by=c
当且仅当gcd(a,b)|c时,方程有解。
这是裴蜀定理,证明因为不会所以就不讲了

exgcd求逆元

我们有一个方程关于x,y的一个二元一次方程ax+by=c
要使这个方程有解,则gcd(a,b)|c。令c=kgcd(a,b),那么设一个关于x0,y0的方程a0x0+b0y0=gcd(a0,b0),那么x=kx0,y=ky0
设这个方程有一组解x,y,就不难得出这组方程的通解:
x+k(b÷gcd(a,b)),yk(a÷gcd(a,b))(k是整数)
只要求出一个解就可以求出所有解了。那么,我们怎么求助一组解呢?用exgcd(逆元)就可以了。

设这个二元一次方程是a0x0+b0y0=gcd(a0,b0)然后通过一次exgcd后成为了a1x1+b1y1=gcd(a1,b1),其中a1=b0 , b1=b0moda0,gcd(a0,b0)=gcd(a1,b1)(其实就是进行一次gcd辗转相除)
那么我们就可以得到
a0x0+b0y0=a1x1+b1y1
进而得到y0=x1,x0=y1b0/a0×x1
a1=0的时候,令x0=0,y0=1,这样就可以递归回溯了。

posted @   jiangtaizhe001  阅读(61)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示