扩展欧几里得的学习(未完成
2016-08-07 19:00
369 查看
ll exgcd(ll a,ll b,ll &x,ll &y) { if(b==0) { x=1; y=0; return a; } ll r=exgcd(b,a%b,x,y); ll t=y; y=x-(a/b)*y; x=t; return r; }
证明见此图:
到时候可以临时推出代码
上述代码可以求出ax+by=gcd(a,b)的一组解
当求ax+by=c时同理,先求ax+by=gcd(a,b),在判断c是否整除gcd(a,b),如果整除就把x,y乘上倍数,否则无解。
求ax=b(mod L)时,原方程可以整理成ax+Ly=b,套用模板,解出ax+Ly=gcd(a,L),判断是否有解,有解就答案乘以倍数,就可以得到一组解
如果想要最小非负数解,再对x进行如下操作
int t=(L/gcd(a,L);
x=((x%t)+t)%t;
证明:
设ax1+by1=ax2+by2;
移项得 a(x1-x2)=b(y2-y1);
设t=gcd(a,b)
两边同时除以t得
a`(x1-x2)=b`(y2-y1)
注意到此时a`,b`互质
所以(y2-y1)为a`的整数倍
设(y2-y1)=a`k
得(x1-x2)=b`k
而b`=b/gcd(a,b);
x的解集为{x|x=特解+k*(b/gcd(a,b))};
所以
int t=L/(gcd(L,a));
x=(x%t+t)%t就是最小非负解啦~
就是这样,喵~
相关文章推荐
- 如何在 LibreOffice 中创建模板以实现省时高效
- 设计模式之行为型模式 - 调用行为的传递问题
- [div+css]晒晒最新制作专题推广页模板
- 2008大学生入党申请书 模板
- IMAIL多语言模板两套Outlook&Gmail模板下载
- 在PHP中使用模板的方法
- 深入解析php模板技术原理【一】
- Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
- 在ASP中不用模板生成HTML静态页直接生成.html页面
- 基于HTML模板和JSON数据的JavaScript交互(移动端)
- C#模板方法模式(Template Method Pattern)实例教程
- javascript文本模板用法实例
- 关于Asp代码与页面的分离模板技术第1/3页
- php模板原理讲解
- 需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
- DataGrid 动态添加模板列 实现代码
- 详解java模板和回调机制
- C++模板之特化与偏特化详解
- 使用Lua编写Web端模板引擎的实例代码分享
- vs.net2008添加模板方法