算法-扩展欧几里得

来源:互联网 发布:网络正常网页无法访问 编辑:程序博客网 时间:2024/05/22 14:01

以下部分内容摘自百度百科

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

设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;}
0 0
原创粉丝点击