码迷,mamicode.com
首页 > 其他好文 > 详细

extendgcd

时间:2015-11-19 09:35:38      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:

看了数论第一章,终于搞懂了扩展欧几里德,其实就是普通欧几里德的逆推过程。

// ax+by = gcd(a,b) ->求解x,y 其中a,b不全为0,可以为负数
// 复杂度:O(log2a)
void
extendgcd(ll a,ll b,long long &x,long long &y) { if(a%b==0) { //到了终止条件 x=0; y=1; return ; } extendgcd(b,a%b,x,y); long long tmpx; tmpx=y; y=x-(a/b)*y; x=tmpx; }

还有大神写的超简洁版本:

//ax + by = gcd(a,b) 
//传入固定值a,b.放回 d=gcd(a,b), x , y
void
MEuclid(int a,int b,int &d,int &x,int &y) {    if(b==0){d=a;x=1;y=0;return;}   MEuclid(b,a%b,d,y,x);    y-=x*(a/b); }

 

extendgcd

标签:

原文地址:http://www.cnblogs.com/chenhuan001/p/4976515.html

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