首页 > 其他 > 详细

extendgcd

时间:2015-11-19 09:33:27      阅读:303      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!