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

Exgcd

时间:2019-10-20 11:13:20      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:logs   www   欧几里得   学习   身体   inline   整数   floor   整理   

%%lkx

学习博客

exgcd(扩展欧几里得)

可以用来判断并求解形如\(ax+by=c\)的方程,当且仅当\(gcd(a,b)|c\)时,存在整数解\(x,y\)
也就是说,\(exgcd\)可以用来求解方程\(ax+by=gcd(a,b)\),令\(a=b,b=a\%b\)则有方程\(b*x_1+(a\%b)*y_1=gcd(b,a\% b)\)
又因为\(gcd(a,b)=gcd(b,a\%b)\),且\(a\%b=a-b*\) \(\lfloor {a/b}\rfloor * y_1=gcd(a,b)\)
整理得:$ay_1+b(x_1-\lfloor {a/b}\rfloor* y_1)=gcd(a,b) $
所以原方程中:\(x=y_1,y=x_1-\lfloor {a/b}\rfloor * y_1\)
所以我们只需递归求\(x_1,y_1\),就能求出\(x,y\)

Code:

void exgcd(int a, int b, int &x, int &y) {
    if(!b) {x = 1, y = 0;return;}
    int d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}

谢谢收看, 祝身体健康!

Exgcd

标签:logs   www   欧几里得   学习   身体   inline   整数   floor   整理   

原文地址:https://www.cnblogs.com/yanxiujie/p/11706756.html

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