扩展欧几里得

来源:互联网 发布:惯性参考系 知乎 编辑:程序博客网 时间:2024/05/23 11:56

a和b的线性组合表示的是ax+by,扩展欧几里得是求ax+by=gcd(a,b)中x和y的值,假设gcd(a,b)==c根据欧几里得公式则gcd(b,a%b)=c,设他们的线性组个是bX+(a%b)Y,

bX+(a%b)Y

=bX+(a-(a/b)b)Y

=bX+aY-(a/b)bY

=aY+b(X-(a/b)Y)

所以得出递推公式,x=Y,y=(X-(a/b)Y).

#include<stdio.h>int x,y;void Euclid(int a,int b){    if(b==0)    {        x=1,y=0;        return;    }    Euclid(b,a%b);    int t=x;    x=y;    y=t-(a/b)*y;}int main(){    int a,b;    scanf("%d%d",&a,&b);    Euclid(a,b);    printf("%d %d\n",x,y);    return 0;}