码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-08-28 17:15:04      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:exgcd   mil   整数   题解   lin   如何   除法   turn   style   

▎裴蜀定理

  这个定理很简洁,就是关于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 }

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

标签:exgcd   mil   整数   题解   lin   如何   除法   turn   style   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!