【vijos】1781 同余方程(拓展欧几里得)

https://vijos.org/p/1781

学习了下拓欧。。

求exgcd时,因为

a*x1+b*y1=a*x2+b*y2=b*x2+(a-b*[a/b])*y2

然后移项得

a*x1+b*y1=b*x2+a*y2-(b*[a/b])*y2

a*(x1-y2)+b*y1-b*x2+(b*[a/b]*y2)=0

a*(x1-y2)+b*(y1-x2+[a/b]*y2)=0

所以

x1=y2, y1=x2-[a/b]*y2(sigh。。我也不知道为什么诶。难道(x1-y2)等于b且(y1-x2+[a/b]*y2)等于-a的情况不行么)

然后求出一组解x0和y0后因为ax0+by0=ax1+by1移项得a(x0-x1)=b(y1-y0)除以d=gcd(a,b)后,设a0=a/d, b0=b/d,可知a0和b0互质,原式变为

a0(x0-x1)=b0(y1-y0)

因为a0和b0互质,要想等式成立,有x0-x1=b0, y1-y0=a0所以x1=x0-b0=x0-b/d;y1=y0+a0=y0+a/d然后就可以得出所有解啦。。。

回到本题,这题可以转换为ax-by=1等式这可以等同于ax+by=1(只是y的符号变了而已)所以我们用拓欧求出来就行了

而非负整数解x可以由x=(x0+b/gcd(a, b))%(b/gcd(a, b)得到

对于方程ax+by=c我们求出来ax+by=(a,b)后求出原方程的解可以这样做

(从而接触到了“不定方程”这东西,,,这是啥,,,以后有时间看看(《初等数论》上有详细介绍),http://baike.baidu.com/view/375208.htm?fr=aladdin
 

 

 

 


 

 

描述

求关于x的同余方程ax ≡ 1 (mod b)的最小正整数解。

格式

输入格式

输入只有一行,包含两个正整数a, b,用一个空格隔开。

输出格式

输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解。

样例1

样例输入1[复制]

3 10

样例输出1[复制]

7

限制

每个测试点1s

提示

对于40%的数据,2 ≤b≤ 1,000;
对于60%的数据,2 ≤b≤ 50,000,000;
对于100%的数据,2 ≤a, b≤ 2,000,000,000。

来源

Noip2012提高组复赛Day2T1

 

posted @   iwtwiioi  阅读(347)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示