您的位置:首页 > 其它

算法-扩展欧几里得

2016-11-16 17:26 288 查看
以下部分内容摘自百度百科

最大公约数与最小公倍数的关系

设a,b的最大公约数为gcd,最小公倍数为lcm

这存在这样的关系:a * b=gcd * lcm

欧几里德算法

欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:

gcd函数就是用来求(a,b)的最大公约数的。

gcd函数的基本性质:gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|)

公式表述 : gcd(a,b)=gcd(b,a mod b)

int gcd(int a,int b){
return b?gcd(b,a%b):a;
}


扩展欧几里得算法

扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然

存在整数对 x,y ,使得 gcd(a,b)=ax+by。

int gcd(int a,int b,int &x,int &y){
if (b==0){
x=1,y=0;
return a;
}
int q=gcd(b,a%b,y,x);
y-=a/b*x;
return q;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: