拓展欧几里得 edgcd 模板+简易推论

LL exgcd(LL a,LL b, LL &x, LL &y) { if(b == 0) { x=1,y=0; return a; } LL d = exgcd(b, a%b, x, y); //x=x1,y=y1 LL z = x;//z=x1 x = y;//x=y1 y = z - y * (a / b); return d; }

a x + b y = = g c d ( x , y ) ax + by == gcd(x,y) ax+by==gcd(x,y) 的最小整数解

假设 a x + b y = = g c d ( x , y ) ax+by == gcd(x,y) ax+by==gcd(x,y)
可得 a x + b y = = g c d ( y , x m o d y ) ax+by == gcd(y,xmody) ax+by==gcd(y,xmody)
构造 b x 1 + ( a m o d b ) y 1 = = g c d ( y , x m o d y ) bx1+(amodb) y1 == gcd(y,xmody) bx1+(amodb)y1==gcd(y,xmody)
可得 b x 1 + ( a − ( a / b × b ) ) y 1 = = g c d ( y , x m o d y ) bx1+(a-(a/b \times b)) y1 == gcd(y,xmody) bx1+(a(a/b×b))y1==gcd(y,xmody)
化简左项
b x 1 + ( a y 1 − ( a / b × b ) y 1 ) bx1+(ay1-(a/b \times b)y1) bx1+(ay1(a/b×b)y1)
= = b x 1 + a y 1 − ( a / b × b × y 1 ) == bx1+ay1-(a/b \times b \times y1) ==bx1+ay1(a/b×b×y1)
= = a y 1 + b ( x 1 − a / b × b × y 1 ) == ay1+b(x1-a/b \times b \times y1) ==ay1+b(x1a/b×b×y1)
x = y 1 , y = x 1 − a / b × b × y 1 x = y1, y = x1-a/b \times b \times y1 x=y1,y=x1a/b×b×y1


__EOF__

本文作者userName
本文链接https://www.cnblogs.com/Nogtade/p/17815976.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Nogtade  阅读(8)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示