首页 > 代码库 > NO10——各种欧几里得
NO10——各种欧几里得
1 int gcd(int n,int m)//n>m 2 { 3 //最大公约数 4 int r; 5 while(m) 6 { 7 r = n%m; 8 n = m; 9 m = r; 10 } 11 return n; 12 } 13 14 int kgcd(int a,int b) 15 { 16 if(!a) return b; 17 if(!b) return a; 18 if(!(a&1) && !(b&1)) 19 return kgcd(a>>1,b>>1)<<1; 20 else if(!(b&1)) return kgcd(a,b>>1); 21 else if(!(a&1)) return kgcd(a>>1,b); 22 else return kgcd(abs(a-b),min(a,b)); 23 } 24 25 //扩展欧几里得 26 //求方程ax+by+c = 0有多少整数解 27 int extgcd(int a,int b,int &x,int &y) 28 { 29 if(!b) 30 { 31 x=1; 32 y=0; 33 return a; 34 } 35 int d = extgcd(b,a%b,x,y); 36 int t = x; 37 x=y; 38 y=t-a/b*y; 39 return d; 40 }
NO10——各种欧几里得
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。