首页 > 编程语言 > 详细

【算法?日更?第五十六期】扩展欧几里得算法

时间:2019-08-28 18:05:33      阅读:104      评论:0      收藏:0      [点我收藏+]

▎裴蜀定理

  这个定理很简洁,就是关于x,y(都是整数)的不定方程在下面的情况下:

  技术分享图片

  必定有解。

  这只是个前置知识,就不证明了(主要是小编太菜)

▎不定方程

  考虑方程ax+by=c的解的情况:

  • 若c=gcd(a,b),那么依照裴蜀定理有解;
  • 若c=k*gcd(a,b),先两边同除k,就会转化成标准形式,有解;
  • 若c与gcd(a,b)互质,那么无解;

  所以问题就是:

  技术分享图片

  如何解决,只要解决了这个问题,所有解的情况就解决了。

▎问题解决

  现在我们考虑怎么让这个问题更简单,思考这样一个问题,已知:

  技术分享图片

  的解(x,y),那么怎么推出:

  技术分享图片

  的解(x‘,y’)呢?

  先抛出结论:技术分享图片

  下面是证明过程:

  技术分享图片

  知道了这个东西之后,我们就可以在算完

  技术分享图片

  的时候很快推出:

  技术分享图片

  这样可以层层递归下去,直到y=0,那么x=1,y=0的情况下就是a+0=gcd(a,0),此条件成立,那么再回溯回去就可以了。

▎代码实现

  感觉像极了辗转相除法。

1 pair<int,int> exgcd(int a,int b)
2 {
3         if(b==0) return pair(1,0);
4         pair<int,int> sum=exgcd(b,a%b);
5         return pair<int,int>(y,x-a/b*y);
6 }

【算法?日更?第五十六期】扩展欧几里得算法

原文:https://www.cnblogs.com/TFLS-gzr/p/11395285.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!